{"id":10442,"date":"2025-10-21T19:15:42","date_gmt":"2025-10-21T19:15:42","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=10442"},"modified":"2025-10-21T19:15:42","modified_gmt":"2025-10-21T19:15:42","slug":"%e5%87%9d%e9%9b%86%e5%ba%a6%e3%81%a8%e7%b5%90%e5%90%88%e5%ba%a6%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e8%aa%bf%e3%81%b9%e3%81%a6%e3%81%bf%e3%81%9fpart2-%e7%b5%90%e5%90%88%e5%ba%a6%e7%b7%a8-iimon-tec","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/10442\/","title":{"rendered":"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) &#8211; iimon TECH BLOG"},"content":{"rendered":"\n<\/p>\n<div>\n<p>\u3053\u3093\u306b\u3061\u306f\u3002iimon\u3067\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u3057\u3066\u3044\u308bhayashi\u3068\u7533\u3057\u307e\u3059\u3002<\/p>\n<p>\u666e\u6bb5\u306f\u4e3b\u306b<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%B3%C8%C4%A5%B5%A1%C7%BD\">\u62e1\u5f35\u6a5f\u80fd<\/a>\u3092\u958b\u767a\u3057\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n<p>\u300c\u7dba\u9e97\u306a\u30b3\u30fc\u30c9\u3068\u306f\u4f55\u304b\u300d\u3068\u3044\u3046\u3053\u3068\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u3044\u3066\u3001\u524d\u56de\u306f\u51dd\u96c6\u5ea6\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\u306e\u3067\u3001<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/tech.iimon.co.jp\/entry\/2025\/07\/15\/160000\">https:\/\/tech.iimon.co.jp\/entry\/2025\/07\/15\/160000<\/a><\/p>\n<p>\u4eca\u56de\u306f\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u7d50\u5408\u5ea6\u3068\u306f\u4e00\u8a00\u3067\u8868\u3059\u3068\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u540c\u58eb\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u5f37\u3055\u3092\u8868\u3059\u6307\u6a19\u3067\u3059\u3002<\/p>\n<p>\u5bc6\u7d50\u5408(\u7d50\u5408\u5ea6\u304c\u9ad8\u3044)\u3060\u3068\u5909\u66f4\u306b\u5f31\u304f\u3001\u518d\u5229\u7528\u6027\u304c\u4f4e\u304f\u3001\u30c6\u30b9\u30c8\u3057\u8f9b\u304b\u3063\u305f\u308a\u3057\u307e\u3059\u3002<\/p>\n<p>\u9006\u306b<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C1%C2%B7%EB%B9%E7\">\u758e\u7d50\u5408<\/a>(\u7d50\u5408\u5ea6\u304c\u4f4e\u3044)\u3060\u3068\u3001\u67d4\u8edf\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u8a2d\u8a08\u306b\u306a\u308b\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u51dd\u96c6\u5ea6\n<ul>\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u3067\u306e\u8a55\u4fa1\u6307\u6a19<\/li>\n<li>\u9ad8\u51dd\u96c6\u3060\u3068\u5805\u7262\u6027\u3001\u4fe1\u983c\u6027\u3001\u518d\u5229\u7528\u6027\u3001\u53ef\u8aad\u6027\u304c\u5411\u4e0a<\/li>\n<\/ul>\n<\/li>\n<li>\u7d50\u5408\u5ea6\n<ul>\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u3067\u306e\u8a55\u4fa1\u6307\u6a19<\/li>\n<li><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C1%C2%B7%EB%B9%E7\">\u758e\u7d50\u5408<\/a>\u3060\u3068\u53ef\u8aad\u6027\u3084\u4fdd\u5b88\u6027\u304c\u9ad8\u3044<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u4e0a\u8a18\u306e\u901a\u308a\u51dd\u96c6\u5ea6\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u3067\u306e\u8a55\u4fa1\u6307\u6a19\u3067\u7d50\u5408\u5ea6\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u3067\u306e\u8a55\u4fa1\u6307\u6a19\u3067\u3059\u3002<\/p>\n<p>\u7d50\u5408\u5ea6\u306f\u51dd\u96c6\u5ea6\u3068\u76f8\u95a2\u95a2\u4fc2\u304c\u3042\u308a\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u305d\u306e\u5f79\u5272\u3092\u679c\u305f\u3059\u70ba\u306e\u30b3\u30fc\u30c9\u304c\u51dd\u96c6\u3057\u3066\u3044\u308c\u3070\u3001\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u983c\u3089\u306a\u304f\u3066\u6e08\u3080\u70ba\u3001\u51dd\u96c6\u5ea6\u304c\u9ad8\u304f\u306a\u308c\u3070\u3001\u7d50\u5408\u5ea6\u306f\u4f4e\u304f\u306a\u308b\u50be\u5411\u304c\u3042\u308b\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>\n<p><strong>\u9ad8\u51dd\u96c6 \u2192 \u81ea\u5206\u306e\u8cac\u52d9\u304c\u306f\u3063\u304d\u308a<\/strong><\/p>\n<p>  \u2192 \u5fc5\u8981\u306a\u60c5\u5831\u3084\u51e6\u7406\u304c\u5185\u90e8\u306b\u307e\u3068\u307e\u308b<\/p>\n<p>  \u2192 \u4ed6\u30e2\u30b8\u30e5\u30fc\u30eb\u3078\u306e\u4f9d\u5b58\u304c\u6e1b\u308b<\/p>\n<p>  \u2192 \u7d50\u5408\u5ea6\u304c\u4f4e\u304f\u306a\u308b<\/p>\n<\/li>\n<li>\n<p><strong>\u4f4e\u51dd\u96c6 \u2192 \u8cac\u52d9\u304c\u6563\u3089\u304b\u308b<\/strong><\/p>\n<p>  \u2192 \u5fc5\u8981\u306a\u60c5\u5831\u3084\u51e6\u7406\u3092\u5916\u304b\u3089\u53d6\u3063\u3066\u304f\u308b<\/p>\n<p>  \u2192 \u4ed6\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u306e\u4f9d\u5b58\u304c\u5897\u3048\u308b<\/p>\n<p>  \u2192 <strong>\u7d50\u5408\u5ea6\u304c\u9ad8\u304f\u306a\u308b<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u4e0a\u8a18\u306e\u3088\u3046\u306b\u51dd\u96c6\u5ea6\u304c\u9ad8\u3044\u3068\u3044\u3046\u306e\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u306e\u6a5f\u80fd\u3084\u30c7\u30fc\u30bf\u304c\u300c\u540c\u3058\u76ee\u7684\u306e\u305f\u3081\u306b\u5bc6\u63a5\u306b\u95a2\u9023\u3057\u3066\u3044\u308b\u300d\u72b6\u614b\u3067\u3059\u3002<\/p>\n<p>\u51dd\u96c6\u5ea6\u3092\u4e0a\u3052\u308c\u3070\u7d50\u5408\u5ea6\u306f\u4e0b\u304c\u308b\u50be\u5411\u306b\u3042\u308a\u307e\u3059\u304c\u3001\u3042\u304f\u307e\u3067\u50be\u5411\u3068\u3055\u308c\u3066\u3044\u3066\u3001<\/p>\n<p>\u305d\u308c\u3082\u5b8c\u5168\u3067\u306f\u306a\u3044\u307f\u305f\u3044\u306a\u306e\u3067<\/p>\n<p>\u7d50\u5408\u306e\u7a2e\u985e\u3092\u77e5\u308a\u3001\u9ad8\u51dd\u96c6\u30fb<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C1%C2%B7%EB%B9%E7\">\u758e\u7d50\u5408<\/a>\u3092\u76ee\u6307\u305b\u3070\u5805\u7262\u6027\u3001\u4fe1\u983c\u6027\u3001\u518d\u5229\u7528\u6027\u3001\u53ef\u8aad\u6027\u3001\u305d\u3057\u3066\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u304c\u66f8\u3051\u308b\u3088\u3046\u306b\u306a\u308a\u305d\u3046\u3067\u3059\u3002<\/p>\n<h3 id=\"\u5bc6\u7d50\u5408\u306e\u5834\u5408\">\u5bc6\u7d50\u5408\u306e\u5834\u5408<\/h3>\n<p>\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u4f9d\u5b58\u304c\u9ad8\u3044\u3068\u5177\u4f53\u7684\u306b\u4ee5\u4e0b\u306e\u554f\u984c\u304c\u8d77\u3053\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u5909\u66f4\u306e\u6ce2\u53ca\u7bc4\u56f2\u304c\u5927\u304d\u3044\n<ul>\n<li>\u4e00\u3064\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5909\u66f4\u3059\u308b\u3068\u3001\u4ed6\u306e\u591a\u304f\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u5f71\u97ff\u304c\u53ca\u3076<\/li>\n<\/ul>\n<\/li>\n<li>\u30c6\u30b9\u30c8\u304c\u66f8\u304d\u306b\u304f\u3044\n<ul>\n<li><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C3%B1%C2%CE%A5%C6%A5%B9%A5%C8\">\u5358\u4f53\u30c6\u30b9\u30c8<\/a>\u3092\u66f8\u304f\u969b\u306b\u3001\u591a\u304f\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u30e2\u30c3\u30af\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/li>\n<\/ul>\n<\/li>\n<li>\u518d\u5229\u7528\u6027\u304c\u4f4e\u3044\n<ul>\n<li>\u7279\u5b9a\u306e\u52d5\u4f5c\u3059\u308b\u74b0\u5883\u3084\u524d\u63d0\u6761\u4ef6\u306b\u5f37\u304f\u4f9d\u5b58\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u4ed6\u306e\u5834\u6240\u3067\u4f7f\u3044\u56de\u3057\u8f9b\u3044<\/li>\n<\/ul>\n<\/li>\n<li>\u8a8d\u77e5\u8ca0\u8377\u304c\u9ad8\u3044\n<ul>\n<li>\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u306e\u7d50\u5408\u5ea6\u304c\u9ad8\u3044\u306e\u3067\u3001\u305d\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u3001\u95a2\u9023\u3059\u308b\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3082\u7406\u89e3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u7d50\u5408\u5ea6\u306f\u4ee5\u4e0b\u306e7\u7a2e\u985e\u306b\u5206\u985e\u3055\u308c\u307e\u3059\u3002<br \/>\n<span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/h\/hayakatsu0120\/20251019\/20251019204524.png\" width=\"690\" height=\"574\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><\/p>\n<h2 id=\"\u5185\u90e8\u7d50\u5408\">\u5185\u90e8\u7d50\u5408<\/h2>\n<p>\u5185\u90e8\u7d50\u5408\u3068\u306f\u3042\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u5185\u90e8\u5b9f\u88c5\uff08\u5909\u6570\u30fb\u51e6\u7406\uff09\u306b\u76f4\u63a5\u4f9d\u5b58\u3057\u3066\u3044\u308b\u72b6\u614b\u306e\u3053\u3068\u3092\u8a00\u3044\u307e\u3059\u3002<\/p>\n<p>private\u306b\u3057\u3066\u3044\u308b\u5909\u6570\u3084\u30e1\u30bd\u30c3\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3092\u884c\u3048\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u72b6\u614b\u3067\u3059\u3002<\/p>\n<p><strong>\u4f8b[1]<\/strong><\/p>\n<p>\u30af\u30e9\u30b9\u306eprivate\u5909\u6570\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9<\/p>\n[User.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> User <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">data<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synIdentifier\">name<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span> <span class=\"synIdentifier\">email<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span> <span class=\"synIdentifier\">address<\/span>: <span class=\"synType\">string<\/span> <span class=\"synIdentifier\">}<\/span>;\n\n  <span class=\"synIdentifier\">constructor<\/span>(<span class=\"synPreProc\">name<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> email<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> address<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synType\">this<\/span>.data = <span class=\"synIdentifier\">{<\/span> <span class=\"synStatement\">name<\/span>, <span class=\"synStatement\">email<\/span>, <span class=\"synStatement\">address <\/span><span class=\"synIdentifier\">}<\/span>;\n  <span class=\"synIdentifier\">}<\/span>\n    \n  .\n  .\n  .\n  <span class=\"synIdentifier\">\u4ed6\u306e\u51e6\u7406<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Hoge\">Hoge<\/a>.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> User <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/User'<\/span>;\n\n<span class=\"synIdentifier\">const<\/span> user = <span class=\"synIdentifier\">new<\/span> User(<span class=\"synConstant\">\"Alice\"<\/span>, <span class=\"synConstant\">\"alice@example.com\"<\/span>, <span class=\"synConstant\">\"Tokyo\"<\/span>)\n\n\n<span class=\"synIdentifier\">const<\/span> address = (user <span class=\"synSpecial\">as<\/span> <span class=\"synType\">any<\/span> ).data.address;\n<\/pre>\n[\u4f8b2]\n<p>\u4ed6\u30e2\u30b8\u30e5\u30fc\u30eb\u306eprivate\u30e1\u30bd\u30c3\u30c9\u3092\u76f4\u63a5\u547c\u3073\u51fa\u3059<\/p>\n[Calculator.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> Calculator <span class=\"synIdentifier\">{<\/span>\n \n  <span class=\"synIdentifier\">addDoubled<\/span>(<span class=\"synPreProc\">a<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> b<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">return<\/span> <span class=\"synType\">this<\/span>.double(a) + <span class=\"synType\">this<\/span>.double(b); \n  <span class=\"synIdentifier\">}<\/span>\n  \n   <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">double<\/span>(<span class=\"synPreProc\">x<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>) <span class=\"synIdentifier\">{<\/span> \n      <span class=\"synStatement\">return<\/span> x * <span class=\"synConstant\">2<\/span>;\n   <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[Fuga.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> Calculator <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/Calculator'<\/span>;\n<span class=\"synIdentifier\">const<\/span> calc = <span class=\"synIdentifier\">new<\/span> Calculator();\n<span class=\"synType\">console<\/span>.<span class=\"synStatement\">log<\/span>((calc <span class=\"synSpecial\">as<\/span> <span class=\"synType\">any<\/span>).double(<span class=\"synConstant\">5<\/span>)); \n<\/pre>\n<p>\u5185\u90e8\u7d50\u5408\u306f\u4ee5\u4e0b\u306e\u7406\u7531\u3067\u6700\u60aa\u3068\u8a00\u308f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AB%A5%D7%A5%BB%A5%EB%B2%BD\">\u30ab\u30d7\u30bb\u30eb\u5316<\/a>\u306e\u7834\u58ca\n<ul>\n<li><code>private<\/code> \u306f\u672c\u6765\u3001\u30af\u30e9\u30b9\u3084\u30e2\u30b8\u30e5\u30fc\u30eb\u5185\u90e8\u306e\u5b9f\u88c5\u8a73\u7d30\u3092\u96a0\u3057\u3001\u5916\u90e8\u304b\u3089\u76f4<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C0%DC%BF%A8\">\u63a5\u89e6<\/a>\u308c\u3089\u308c\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3067\u3059\u3002\u3053\u308c\u304c\u7834\u3089\u308c\u308b\u3068\u3001\u5185\u90e8\u306e\u72b6\u614b\u3084\u52d5\u4f5c\u3092\u5916\u90e8\u304b\u3089\u52dd\u624b\u306b\u64cd\u4f5c\u3067\u304d\u3066\u3057\u307e\u3044\u3001\u8a2d\u8a08\u306e\u610f\u56f3\u304c\u5d29\u308c\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\u5185\u90e8\u72b6\u614b\u306e\u4e0d\u6574\u5408\u3084\u7834\u58ca\n<ul>\n<li>\u5916\u90e8\u304b\u3089 <code>private<\/code> \u306b\u30a2\u30af\u30bb\u30b9\u3057\u4e0d\u9069\u5207\u306a\u5024\u3092\u8a2d\u5b9a\u3057\u305f\u308a\u3001\u4e88\u671f\u3057\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3076\u3068\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u72b6\u614b\u304c\u58ca\u308c\u305f\u308a\u4e00\u8cab\u6027\u304c\u5931\u308f\u308c\u307e\u3059\u3002\u7d50\u679c\u3068\u3057\u3066\u4e0d\u5177\u5408\u306e\u539f\u56e0\u306b\u306a\u308a\u307e\u3059\u3057\u3001\u578b\u4ed8\u3051\u3092\u3057\u3066\u3044\u308b\u610f\u5473\u304c\u306a\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u30fb\u4fdd\u5b88\u6027\u306e\u4f4e\u4e0b\n<ul>\n<li>\u5185\u90e8\u5b9f\u88c5\u3092\u52dd\u624b\u306b\u4f7f\u308f\u308c\u308b\u3068\u3001\u958b\u767a\u8005\u304c\u5b9f\u88c5\u3092\u5909\u66f4\u3057\u305f\u969b\u306b\u3069\u3053\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u304b\u8ffd\u3044\u3065\u3089\u304f\u306a\u308a\u3001\u4fee\u6b63\u304c\u56f0\u96e3\u306b\u306a\u308a\u307e\u3059\u3002\u7d50\u679c\u3068\u3057\u3066\u30d0\u30b0\u306e\u767a\u751f\u3084\u6539\u4fee\u30b3\u30b9\u30c8\u5897\u5927\u3092\u62db\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u306e\u5897\u5927\n<ul>\n<li>\u5185\u90e8\u306e\u91cd\u8981\u306a\u51e6\u7406\u3084\u30c7\u30fc\u30bf\u306b\u5916\u90e8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u3066\u3057\u307e\u3046\u3068\u3001\u60aa\u610f\u306e\u3042\u308b\u30b3\u30fc\u30c9\u304b\u3089\u64cd\u4f5c\u3055\u308c\u308b\u30ea\u30b9\u30af\u304c\u9ad8\u307e\u308a\u307e\u3059\u3002\u7279\u306b\u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u3084\u8a8d\u8a3c\u95a2\u9023\u306f\u5371\u967a\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"\u5171\u901a\u7d50\u5408\">\u5171\u901a\u7d50\u5408<\/h2>\n[\u4f8b1]\n<p>\u5171\u901a\u7d50\u5408\u3068\u306f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%CA%D1%BF%F4\">\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570<\/a>\u3084\u5171\u6709\u72b6\u614b\u3092\u8907\u6570\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u53c2\u7167\u30fb\u5909\u66f4\u3067\u304d\u308b\u72b6\u614b\u3067\u3059\u3002<\/p>\n[SharedConfig.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> sharedConfig = <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">maxImages<\/span>: <span class=\"synConstant\">5<\/span>,\n    <span class=\"synStatement\">allowedCategories<\/span>: <span class=\"synIdentifier\">[<\/span><span class=\"synConstant\">'\u5916\u89b3'<\/span>, <span class=\"synConstant\">'\u5468\u8fba'<\/span>, <span class=\"synConstant\">'\u305d\u306e\u4ed6'<\/span><span class=\"synIdentifier\">]<\/span>,\n    <span class=\"synStatement\">uploadTimeout<\/span>: <span class=\"synConstant\">3000<\/span>,\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n[ImageValidator.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> sharedConfig <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/sharedConfig'<\/span>;\n\n<span class=\"synStatement\">class<\/span> ImageValidator <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">validate<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">ImageType<\/span>[]) <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synStatement\">if<\/span> (images.<span class=\"synStatement\">length<\/span> &gt; sharedConfig.maxImages) <span class=\"synIdentifier\">{<\/span>\n            \n            sharedConfig.maxImages = images.<span class=\"synStatement\">length<\/span>;\n        <span class=\"synIdentifier\">}<\/span>\n        <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">true<\/span>;\n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[CategoryFilter.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> sharedConfig <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/sharedConfig'<\/span>;\n\n<span class=\"synStatement\">class<\/span> CategoryFilter <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">filter<\/span>(<span class=\"synPreProc\">category<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synStatement\">if<\/span> (!sharedConfig.allowedCategories.<span class=\"synStatement\">includes<\/span>(category)) <span class=\"synIdentifier\">{<\/span>\n            \n            sharedConfig.allowedCategories.<span class=\"synStatement\">push<\/span>(category);\n        <span class=\"synIdentifier\">}<\/span>\n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u5171\u901a\u7d50\u5408\u306f\u4ee5\u4e0b\u306e\u7406\u7531\u3067\u3068\u3066\u3082\u60aa\u3044\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u3069\u3053\u3067\u5024\u304c\u5909\u66f4\u3055\u308c\u308b\u304b\u5206\u304b\u3089\u306a\u3044\u3002<\/li>\n<li>\u4e00\u3064\u306e\u7b87\u6240\u3092\u76f4\u3057\u305f\u969b\u306b\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u306e\u3067\u3001\u3042\u3089\u3086\u308b\u3068\u3053\u308d\u306b\u5f71\u97ff\u304c\u53ca\u3076\u53ef\u80fd\u6027\u304c\u9ad8\u304f\u4fdd\u5b88\u6027\u304c\u4f4e\u3044\u3002<\/li>\n<li>\u4e26\u884c\u51e6\u7406\u3067\u7af6\u5408\u72b6\u614b\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u3002<\/li>\n<\/ul>\n<h2 id=\"\u5916\u90e8\u7d50\u5408\">\u5916\u90e8\u7d50\u5408<\/h2>\n<p>\u5916\u90e8\u7d50\u5408\u3068\u306f\u3001\u5916\u90e8\uff08\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u30d5\u30a1\u30a4\u30eb\u3001\u5916\u90e8<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>\u3001\u30c7<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%D0%A5%A4%A5%B9\">\u30d0\u30a4\u30b9<\/a>\u306a\u3069\uff09\u306b\u8907\u6570\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u4f9d\u5b58\u3057\u3066\u3044\u308b\u72b6\u614b\u306b\u3044\u308b\u3053\u3068\u3092\u6307\u3057\u307e\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001\u5916\u90e8<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A1%BC%A5%BF%B7%C1%BC%B0\">\u30c7\u30fc\u30bf\u5f62\u5f0f<\/a>\u306b\u4f9d\u5b58\u3059\u308b\u3053\u3068\u3082\u5916\u90e8\u7d50\u5408\u3068\u306a\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u4f8b\u3048\u3070\u4ee5\u4e0b\u306eLogin.ts\u306f\u30ed\u30b0\u30a4\u30f3\u304c\u4e0a\u624b\u304f\u3044\u3063\u305f\u3089\u3001localStorage\u306b<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/access\">access<\/a>_token\u3092\u4fdd\u5b58\u3057\u3066user_info\u3092return\u3059\u308b\u30b3\u30fc\u30c9\u3067\u3001AuthStatus.ts\u306ftoken\u304c\u6709\u52b9\u304b\u78ba\u8a8d\u3059\u308b\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n[Login.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> loginUser = <span class=\"synStatement\">async<\/span> (<span class=\"synPreProc\">email<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> password<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>)<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">const<\/span> response = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(<span class=\"synConstant\">'https:\/\/api.example.com\/auth\/login'<\/span>, <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">method<\/span>: <span class=\"synConstant\">'POST'<\/span>,\n    <span class=\"synStatement\">headers<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synConstant\">'Content-Type'<\/span>: <span class=\"synConstant\">'application\/json'<\/span> <span class=\"synIdentifier\">}<\/span>,\n    <span class=\"synStatement\">body<\/span>: <span class=\"synType\">JSON<\/span>.<span class=\"synStatement\">stringify<\/span>(<span class=\"synIdentifier\">{<\/span> <span class=\"synStatement\">email<\/span>, <span class=\"synStatement\">password <\/span><span class=\"synIdentifier\">}<\/span>)\n  <span class=\"synIdentifier\">}<\/span>);\n\n  <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> response.json();\n\n  <span class=\"synStatement\">if<\/span> (data.success) <span class=\"synIdentifier\">{<\/span>\n    localStorage.<span class=\"synStatement\">setItem<\/span>(<span class=\"synConstant\">'token'<\/span>, data.data.access_token);\n    \n    \n    <span class=\"synStatement\">return<\/span> data.data.user_info; \n  <span class=\"synIdentifier\">}<\/span>\n  <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(data.message);\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n[login.ts\u30ec\u30b9\u30dd\u30f3\u30b9<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A1%BC%A5%BF%B7%C1%BC%B0\">\u30c7\u30fc\u30bf\u5f62\u5f0f<\/a>]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synIdentifier\">{<\/span>\n  <span class=\"synConstant\">\"success\"<\/span>: <span class=\"synConstant\">true<\/span>,\n  <span class=\"synConstant\">\"data\"<\/span>: <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synConstant\">\"user_info\"<\/span>: <span class=\"synIdentifier\">{<\/span>\n      <span class=\"synConstant\">\"id\"<\/span>: <span class=\"synConstant\">\"123\"<\/span>,\n      <span class=\"synConstant\">\"email\"<\/span>: <span class=\"synConstant\">\"user@example.com\"<\/span>, \n      <span class=\"synConstant\">\"full_name\"<\/span>: <span class=\"synConstant\">\"\u7530\u4e2d\u592a\u90ce\"<\/span>,\n      <span class=\"synConstant\">\"profile_image\"<\/span>: <span class=\"synConstant\">\"https:\/\/...\"<\/span>,\n      <span class=\"synConstant\">\"created_at\"<\/span>: <span class=\"synConstant\">\"2023-01-01\"<\/span>,\n      <span class=\"synConstant\">\"last_login\"<\/span>: <span class=\"synConstant\">\"2024-01-01\"<\/span>\n    <span class=\"synIdentifier\">}<\/span>,\n    <span class=\"synConstant\">\"access_token\"<\/span>: <span class=\"synConstant\">\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"<\/span>,\n    <span class=\"synConstant\">\"expires_in\"<\/span>: <span class=\"synConstant\">3600<\/span>\n  <span class=\"synIdentifier\">}<\/span>,\n  <span class=\"synConstant\">\"message\"<\/span>: <span class=\"synConstant\">\"\u30ed\u30b0\u30a4\u30f3\u6210\u529f\"<\/span>\n<span class=\"synIdentifier\">}<\/span>\n\n\n<span class=\"synIdentifier\">{<\/span>\n  <span class=\"synConstant\">\"success\"<\/span>: <span class=\"synConstant\">false<\/span>,\n  <span class=\"synConstant\">\"data\"<\/span>: <span class=\"synConstant\">null<\/span>,\n  <span class=\"synConstant\">\"message\"<\/span>: <span class=\"synConstant\">\"\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\"<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[AuthStatus.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> checkAuthStatus = <span class=\"synStatement\">async<\/span> ()<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">const<\/span> token = localStorage.<span class=\"synStatement\">getItem<\/span>(<span class=\"synConstant\">'token'<\/span>);\n  <span class=\"synStatement\">if<\/span> (!token) <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">false<\/span>;\n\n  <span class=\"synIdentifier\">const<\/span> response = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(<span class=\"synConstant\">'https:\/\/api.example.com\/auth\/status'<\/span>, <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">method<\/span>: <span class=\"synConstant\">'POST'<\/span>,\n    <span class=\"synStatement\">headers<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synConstant\">'Authorization'<\/span>: <span class=\"synConstant\">`Bearer <\/span><span class=\"synStatement\">${<\/span>token<span class=\"synStatement\">}<\/span><span class=\"synConstant\">`<\/span> <span class=\"synIdentifier\">}<\/span>\n  <span class=\"synIdentifier\">}<\/span>);\n\n  <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> response.json();\n  \n  <span class=\"synStatement\">return<\/span> data.success &amp;&amp; data.data.valid;\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n[tokenAuth.ts\u30ec\u30b9\u30dd\u30f3\u30b9<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A1%BC%A5%BF%B7%C1%BC%B0\">\u30c7\u30fc\u30bf\u5f62\u5f0f<\/a>]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synIdentifier\">{<\/span>\n  <span class=\"synConstant\">\"success\"<\/span>: <span class=\"synConstant\">true<\/span>,\n  <span class=\"synConstant\">\"data\"<\/span>: <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synConstant\">\"valid\"<\/span>: <span class=\"synConstant\">true<\/span>,        \n    <span class=\"synConstant\">\"expires_at\"<\/span>: <span class=\"synConstant\">\"2024-12-31T23:59:59Z\"<\/span>,  \n    <span class=\"synConstant\">\"user_id\"<\/span>: <span class=\"synConstant\">\"123\"<\/span>      \n  <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n\n\n<span class=\"synIdentifier\">{<\/span>\n  <span class=\"synConstant\">\"success\"<\/span>: <span class=\"synConstant\">true<\/span>,\n  <span class=\"synConstant\">\"data\"<\/span>: <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synConstant\">\"valid\"<\/span>: <span class=\"synConstant\">false<\/span>,       \n    <span class=\"synConstant\">\"reason\"<\/span>: <span class=\"synConstant\">\"expired\"<\/span>   \n  <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u3053\u308c\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u554f\u984c\u304c\u3042\u308a\u3001\u4fdd\u5b88\u6027\u304c\u4f4e\u3044\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>\n<p>\u5225\u3005\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3067<code>https:\/\/api.example.com\/auth<\/code> \u306e\u540c\u3058<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/api\">api<\/a>\u3092\u53e9\u3044\u3066\u3044\u308b\u70ba\u3001\u540c\u3058\u3088\u3046\u306afetch\u51e6\u7406\u304c\u8907\u6570\u7b87\u6240\u306b\u6563\u5728\u3057\u3066\u3044\u3066\u3001\u305d\u306e\u3088\u3046\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u5897\u3048\u308c\u3070\u5897\u3048\u308b\u307b\u3069\u7ba1\u7406\u30b3\u30b9\u30c8\u304c\u4e0a\u304c\u308a\u307e\u3059\u3002<\/p>\n<pre><code class=\"``tsx\">  const response = await fetch('https:\/\/api.example.com\/auth\/...', {\n    headers: { 'Authorization': `Bearer ${token}` }\n  });\n<\/code><\/pre>\n<\/li>\n<li>\n<p><code>return data.data.user_info<\/code>\u306e\u3088\u3046\u306b\u5916\u90e8\u304b\u3089\u8fd4\u3063\u3066\u304d\u305f\u30c7\u30fc\u30bf\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u3001\u305d\u306e\u307e\u307e\u8fd4\u3057\u3066\u3044\u308b\u306e\u3067\u547c\u3073\u51fa\u3057\u5143\u3067<code>res.user_info<\/code> \u306e\u3088\u3046\u306b\u5916\u90e8\u3067\u4f5c\u3089\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u7d50\u5408\u5ea6\u304c\u4e0a\u304c\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u3002\u305d\u308c\u306b\u3088\u308a\u3001\u4eee\u306buserInfo\u306e\u4e2d\u8eab\u3092\u53c2\u7167\u3057\u3066\u3044\u308b\u547c\u3073\u51fa\u3057\u5143\u304c\u591a\u3051\u308c\u3070\u591a\u3044\u307b\u3069\u3001user_info\u5f71\u97ff\u7bc4\u56f2\u304c\u5927\u304d\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>  [\u30e2\u30b8\u30e5\u30fc\u30ebA]\n<pre><code class=\"``tsx\">  const userInfo = await loginUser('email', 'password')\n\n  const funcA() {\n      const id = userInfo.id\n      \/\/ id\u3092\u4f7f\u3063\u305f\u51e6\u7406\n  }\n\n  const funcB() {\n      const id = userInfo.id\n      \/\/ id\u3092\u4f7f\u3063\u305f\u51e6\u7406\n  }\n\n  \/\/ \u4eee\u306buserInfo\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306ekey\u304cid\u2192userId\u3068\u306a\u3063\u305f\u3089\u3001\n  \/\/ \u53c2\u7167\u3057\u3066\u3044\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u6570\u3060\u3051\u66f8\u304d\u63db\u3048\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u3002\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h2 id=\"\u5236\u5fa1\u7d50\u5408\">\u5236\u5fa1\u7d50\u5408<\/h2>\n<p>\u5236\u5fa1\u7d50\u5408\u3068\u306f\u3042\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u4ed6\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u300c\u51e6\u7406\u306e\u6d41\u308c\uff08\u5236\u5fa1\uff09\u300d\u3092\u6307\u793a\u3059\u308b\u60c5\u5831\u3092\u6e21\u3059\u5f62\u306e\u7d50\u5408\u3067\u3059\u3002<\/p>\n<p>\u3064\u307e\u308a\u3001\u300c\u3053\u306e\u30d5\u30e9\u30b0\u304c true \u306a\u3089\u3053\u306e\u51e6\u7406\u3092\u3057\u3066\u300d\u300cfalse \u306a\u3089\u5225\u306e\u51e6\u7406\u3092\u3057\u3066\u300d\u3068\u3044\u3046\u3088\u3046\u306b\u3001<\/p>\n<p>\u547c\u3073\u51fa\u3057\u5074\u304c\u51e6\u7406\u306e\u8a73\u7d30\u306a\u6d41\u308c\u3092\u6c7a\u3081\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u72b6\u614b\u3067\u3059\u3002<\/p>\n<h2 id=\"\u7279\u5fb4\">\u7279\u5fb4<\/h2>\n<ul>\n<li>\u5236\u5fa1\u7528\u306e\u30d5\u30e9\u30b0\u3084\u30b3\u30fc\u30c9\u3092\u5f15\u6570\u3068\u3057\u3066\u6e21\u3059\u3002<\/li>\n<li>\u547c\u3073\u51fa\u3057\u5143\u304c\u547c\u3073\u51fa\u3057\u5148\u306e\u5185\u90e8\u51e6\u7406\u3092\u77e5\u3063\u3066\u3044\u306a\u3044\u3068\u4f7f\u3048\u306a\u3044\u3002<\/li>\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u72ec\u7acb\u6027\u304c\u4f4e\u304f\u306a\u308b\u3002<\/li>\n<li>\u5185\u90e8\u306e\u51e6\u7406\u4ed5\u69d8\u304c\u5909\u66f4\u3055\u308c\u308b\u3068\u3001\u547c\u3073\u51fa\u3057\u5143\u3082\u4fee\u6b63\u304c\u5fc5\u8981\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u9ad8\u3044\u3002<\/li>\n<\/ul>\n[\u4f8b1]\n<p>\u4ee5\u4e0b\u306f\u6e21\u3055\u308c\u305fmode\u306b\u3088\u3063\u3066\u3001data\u306e\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u5f62\u5f0f\u3092\u5909\u3048\u3066\u307e\u3059\u3002<\/p>\n[DataFormat.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">default<\/span> <span class=\"synStatement\">class<\/span> DataFormat <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">process<\/span>(<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>[]<span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> mode<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'csv'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span> <span class=\"synStatement\">else<\/span> <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'json'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span> <span class=\"synStatement\">else<\/span> <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'xml'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span> <span class=\"synStatement\">else<\/span> <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'text'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span>\n    <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(<span class=\"synConstant\">'Unknown mode'<\/span>);\n  <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[hogehoge.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> DataFormat <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/DataFormat'<\/span>;\n\n<span class=\"synIdentifier\">const<\/span> processor = <span class=\"synIdentifier\">new<\/span> DataFormat();\n<span class=\"synIdentifier\">const<\/span> csvResult = processor.process(<span class=\"synIdentifier\">[<\/span><span class=\"synConstant\">'a'<\/span>, <span class=\"synConstant\">'b'<\/span>, <span class=\"synConstant\">'c'<\/span><span class=\"synIdentifier\">]<\/span>, <span class=\"synConstant\">'csv'<\/span>);     \n<span class=\"synIdentifier\">const<\/span> jsonResult = processor.process(<span class=\"synIdentifier\">[<\/span><span class=\"synConstant\">'a'<\/span>, <span class=\"synConstant\">'b'<\/span>, <span class=\"synConstant\">'c'<\/span><span class=\"synIdentifier\">]<\/span>, <span class=\"synConstant\">'json'<\/span>);   \n<\/pre>\n<p>\u4e0a\u8a18\u306e\u5236\u5fa1\u7d50\u5408\u306f\u4ee5\u4e0b\u306e\u7406\u7531\u3067\u6539\u5584\u70b9\u304c\u3042\u308b\u3068\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u547c\u3073\u51fa\u3057\u5143\u304c\u5185\u90e8\u4ed5\u69d8\u3092\u77e5\u3063\u3066\u3044\u306a\u3044\u3068\u4f7f\u3048\u306a\u3044<\/li>\n<li>\u5185\u90e8\u3082\u5358\u4e00\u8cac\u4efb\u306b\u306a\u3063\u3066\u3044\u306a\u3044<\/li>\n<\/ul>\n<p>\u7d50\u5408\u5ea6\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u5f37\u3055\u3092\u8868\u3059\u306e\u3067\u3001\u547c\u3073\u51fa\u3057\u305f\u5074\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u547c\u3073\u51fa\u3055\u308c\u305f\u5074\u306e\u30e1\u30bd\u30c3\u30c9\u306e\u4f9d\u5b58\u95a2\u4fc2\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u5236\u5fa1\u7d50\u5408\u3067\u547c\u3073\u51fa\u3055\u308c\u308b\u30e1\u30bd\u30c3\u30c9\u306f\u30e1\u30bd\u30c3\u30c9\u81ea\u4f53\u3082\u8ad6\u7406\u7684\u51dd\u96c6\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u975e\u5e38\u306b\u9ad8\u3044\u306e\u3067\u3001<\/p>\n<p>\u3053\u3061\u3089\u3082\u51dd\u96c6\u5ea6\u3092\u4e0a\u3052\u3066\u7d50\u5408\u5ea6\u3092\u4e0b\u3052\u308b\u5de5\u592b\u3092\u3059\u3079\u304d\u7d50\u5408\u306e\u7a2e\u985e\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h2 id=\"\u30b9\u30bf\u30f3\u30d7\u7d50\u5408\">\u30b9\u30bf\u30f3\u30d7\u7d50\u5408<\/h2>\n<p>\u30b9\u30bf\u30f3\u30d7\u7d50\u5408\u3068\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u3067\u5fc5\u8981\u4ee5\u4e0a\u306b\u5927\u304d\u306a\u30c7\u30fc\u30bf\u69cb\u9020(\u30af\u30e9\u30b9\u30fb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306a\u3069\u306a\u3069\u3002\u3002\u3002)\u3092\u3084\u308a\u53d6\u308a\u3057\u3066\u3057\u307e\u3046\u7d50\u5408\u306e\u3053\u3068\u3067\u3059\u3002<\/p>\n<h2 id=\"\u7279\u5fb4-1\">\u7279\u5fb4<\/h2>\n<ul>\n<li>\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3060\u3051\u3067\u306a\u304f\u3001\u305d\u306e\u5468\u8fba\u60c5\u5831\u307e\u3067\u307e\u3068\u3081\u3066\u6e21\u3057\u3066\u3057\u307e\u3046\u3002<\/li>\n<li>\u547c\u3073\u51fa\u3055\u308c\u305f\u5074\u304c\u3001\u6e21\u3055\u308c\u305f\u69cb\u9020\u306e\u4e00\u90e8\u3060\u3051\u3092\u4f7f\u3046\u3002\uff08\u6b8b\u308a\u306f\u7121\u8996\u3059\u308b\uff09<\/li>\n<li>\u7d50\u5408\u5ea6\u3068\u3057\u3066\u306f\u30c7\u30fc\u30bf\u7d50\u5408\u3088\u308a\u60aa\u304f\u3001\u5236\u5fa1\u7d50\u5408\u3088\u308a\u306f\u30de\u30b7\u306a\u4e2d\u9593\u3042\u305f\u308a\u3002<\/li>\n<\/ul>\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synStatement\">type <\/span><span class=\"synIdentifier\">Property <\/span><span class=\"synStatement\">=<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">id<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n  <span class=\"synIdentifier\">name<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n  <span class=\"synIdentifier\">address<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n  <span class=\"synIdentifier\">price<\/span>: <span class=\"synType\">number<\/span><span class=\"synStatement\">;<\/span>\n  <span class=\"synIdentifier\">ownerName<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n  <span class=\"synIdentifier\">createdAt<\/span>: <span class=\"synIdentifier\">Date<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n\n<span class=\"synIdentifier\">const<\/span> property: <span class=\"synIdentifier\">Property<\/span> = <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synStatement\">id<\/span>: <span class=\"synConstant\">\"p-001\"<\/span>,\n  <span class=\"synStatement\">name<\/span>: <span class=\"synConstant\">\"\u30b5\u30f3\u30d7\u30eb\u7269\u4ef6\"<\/span>,\n  <span class=\"synStatement\">address<\/span>: <span class=\"synConstant\">\"\u6771\u4eac\u90fd\u6e2f\u533a...\"<\/span>,\n  <span class=\"synStatement\">price<\/span>: <span class=\"synConstant\">120000<\/span>,\n  <span class=\"synStatement\">ownerName<\/span>: <span class=\"synConstant\">\"\u5c71\u7530\u592a\u90ce\"<\/span>,\n  <span class=\"synStatement\">createdAt<\/span>: <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Date<\/span>(),\n<span class=\"synIdentifier\">}<\/span>;\n\n\n<span class=\"synIdentifier\">const<\/span> displayPrice = (<span class=\"synPreProc\">property<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Property<\/span>)<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synType\">console<\/span>.log(<span class=\"synConstant\">`\u4fa1\u683c: <\/span><span class=\"synStatement\">${<\/span>property.price<span class=\"synStatement\">}<\/span><span class=\"synConstant\">\u5186`<\/span>);\n<span class=\"synIdentifier\">}<\/span>\n\ndisplayPrice(property); \n<\/pre>\n<p>\u4e0a\u8a18\u306f\u4fa1\u683c\u3092\u8868\u793a\u3057\u305f\u3044\u3060\u3051\u306a\u306e\u306b\u5927\u304d\u306a\u69cb\u9020\u4f53\u3092\u6e21\u3057\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u4f8b\u3067\u3059\u3002<\/p>\n<p><code>displayPrice<\/code> \u306f <code>price<\/code> \u3057\u304b\u4f7f\u3063\u3066\u3044\u306a\u3044\u306e\u306b\u3001<code>Property<\/code> \u5168\u4f53\u3092\u53d7\u3051\u53d6\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"\u30c7\u30fc\u30bf\u7d50\u5408\">\u30c7\u30fc\u30bf\u7d50\u5408<\/h2>\n<p>\u30c7\u30fc\u30bf\u7d50\u5408\u3068\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u3067\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u30c7\u30fc\u30bf\u3060\u3051\u3092\u3084\u308a\u53d6\u308a\u3059\u308b\u7d50\u5408\u306e\u3053\u3068\u3067\u3059\u3002<\/p>\n<h2 id=\"\u7279\u5fb4-2\">\u7279\u5fb4<\/h2>\n<ul>\n<li>\u3084\u308a\u53d6\u308a\u3059\u308b\u306e\u306f\u5358\u7d14\u306a\u30c7\u30fc\u30bf\uff08\u5024\u3084\u5358\u4e00\u5909\u6570\uff09<\/li>\n<li>\u69cb\u9020\u4f53\u3084\u30af\u30e9\u30b9\u5168\u4f53\u3067\u306f\u306a\u304f\u3001\u672c\u5f53\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3060\u3051\u3092\u6e21\u3059<\/li>\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u4f9d\u5b58\u304c\u5c0f\u3055\u304f\u3001\u518d\u5229\u7528\u3057\u3084\u3059\u3044<\/li>\n<li>\u7d50\u5408\u5ea6\u306e\u4f4e\u3044\u3001\u826f\u3044\u7d50\u5408\u306e\u4e00\u3064<\/li>\n<\/ul>\n[\u4f8b1]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synIdentifier\">const<\/span> property: <span class=\"synIdentifier\">Property<\/span> = <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synStatement\">id<\/span>: <span class=\"synConstant\">\"p-001\"<\/span>,\n  <span class=\"synStatement\">name<\/span>: <span class=\"synConstant\">\"\u30b5\u30f3\u30d7\u30eb\u7269\u4ef6\"<\/span>,\n  <span class=\"synStatement\">address<\/span>: <span class=\"synConstant\">\"\u6771\u4eac\u90fd\u6e2f\u533a...\"<\/span>,\n  <span class=\"synStatement\">price<\/span>: <span class=\"synConstant\">120000<\/span>,\n  <span class=\"synStatement\">ownerName<\/span>: <span class=\"synConstant\">\"\u5c71\u7530\u592a\u90ce\"<\/span>,\n  <span class=\"synStatement\">createdAt<\/span>: <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Date<\/span>(),\n<span class=\"synIdentifier\">}<\/span>;\n\n\n\n<span class=\"synIdentifier\">const<\/span> displayPrice = (<span class=\"synPreProc\">price<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>)<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synType\">console<\/span>.log(<span class=\"synConstant\">`\u4fa1\u683c: <\/span><span class=\"synStatement\">${<\/span>price<span class=\"synStatement\">}<\/span><span class=\"synConstant\">\u5186`<\/span>);\n<span class=\"synIdentifier\">}<\/span>\n\n\ndisplayPrice(property.price);\n<\/pre>\n<p>\u4e0a\u8a18\u306e\u3088\u3046\u306a\u7d50\u5408\u5ea6\u3060\u3068\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u4f9d\u5b58\u5ea6\u304c\u4f4e\u3044\u3002<\/li>\n<li>\u518d\u5229\u7528\u3057\u3084\u3059\u3044 \u3002<\/li>\n<li>\u30c6\u30b9\u30c8\u3057\u3084\u3059\u3044\u3002<\/li>\n<\/ul>\n<p>\u30b9\u30bf\u30f3\u30d7\u7d50\u5408\u306e\u6e21\u3059\u30c7\u30fc\u30bf\u3092\u7d5e\u3063\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u8003\u3048\u3066\u3057\u307e\u3063\u3066\u554f\u984c\u306a\u3044\u304b\u306a\u3063\u3066\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\">\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408<\/h2>\n<p>\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\u3068\u306f\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u7d50\u5408\u5ea6\u306e\u4e2d\u3067\u6700\u3082\u4f4e\u3044\u30ec\u30d9\u30eb\u306b\u5206\u985e\u3055\u308c\u308b\u7d50\u5408\u5f62\u614b\u3067\u3059\u3002<\/p>\n<p>\u30e2\u30b8\u30e5\u30fc\u30eb\u540c\u58eb\u304c\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057\uff08\u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\uff09\u3060\u3051\u3067\u3084\u308a\u53d6\u308a\u3059\u308b\u5f62\u3092\u6307\u3057\u307e\u3059\u3002<\/p>\n<h2 id=\"\u7279\u5fb4-3\">\u7279\u5fb4<\/h2>\n<ul>\n<li>\u5f15\u6570\u304c\u7121\u3044\u95a2\u6570\u547c\u3073\u51fa\u3057\u306b\u3088\u308b\u4f9d\u5b58\u3002<\/li>\n<li>\u547c\u3073\u51fa\u3057\u5143\u306f\u76f8\u624b\u306e\u5185\u90e8\u69cb\u9020\u3084<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A1%BC%A5%BF%B7%C1%BC%B0\">\u30c7\u30fc\u30bf\u5f62\u5f0f<\/a>\u3092\u77e5\u3089\u306a\u3044\u3002<\/li>\n<li>\u5185\u90e8\u5b9f\u88c5\u304c\u5909\u308f\u3063\u3066\u3082\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B7%A5%B0%A5%CD%A5%C1%A5%E3\">\u30b7\u30b0\u30cd\u30c1\u30e3<\/a>(\u30e1\u30bd\u30c3\u30c9\u540d\u3001\u623b\u308a\u5024\u306e\u578b)\u304c\u5909\u308f\u3089\u306a\u3051\u308c\u3070\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\u30e1\u30bd\u30c3\u30c9\u5074\u306f\u5f71\u97ff\u3092\u53d7\u3051\u306a\u3044\u3002<\/li>\n<\/ul>\n[GetCurrentLocationWeather.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synStatement\">type <\/span><span class=\"synIdentifier\">GeolocationPositionType <\/span><span class=\"synStatement\">=<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">coords<\/span>: <span class=\"synIdentifier\">GeolocationCoordinatesType<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">timestamp<\/span>: <span class=\"synType\">number<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n\n<span class=\"synStatement\">type <\/span><span class=\"synIdentifier\">GeolocationCoordinatesType <\/span><span class=\"synStatement\">=<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">latitude<\/span>: <span class=\"synType\">number<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">longitude<\/span>: <span class=\"synType\">number<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">altitude<\/span>: <span class=\"synType\">number<\/span> <span class=\"synStatement\">|<\/span> <span class=\"synType\">null<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">accuracy<\/span>: <span class=\"synType\">number<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">altitudeAccuracy<\/span>: <span class=\"synType\">number<\/span> <span class=\"synStatement\">|<\/span> <span class=\"synType\">null<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">heading<\/span>: <span class=\"synType\">number<\/span> <span class=\"synStatement\">|<\/span> <span class=\"synType\">null<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synStatement\">readonly<\/span> <span class=\"synIdentifier\">speed<\/span>: <span class=\"synType\">number<\/span> <span class=\"synStatement\">|<\/span> <span class=\"synType\">null<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n\n\n\n\n\n<span class=\"synIdentifier\">const<\/span> getCurrentPosition = ():<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Promise<\/span>GeolocationPositionType&gt;<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span>\n    <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Promise<\/span>((<span class=\"synPreProc\">resolve<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> reject<\/span>)<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synType\">navigator<\/span>.<span class=\"synStatement\">geolocation<\/span>.<span class=\"synStatement\">getCurrentPosition<\/span>(resolve, reject);\n    <span class=\"synIdentifier\">}<\/span>);\n\n\n\n\n\n\n<span class=\"synIdentifier\">const<\/span> getCurrentLocationWeather = <span class=\"synStatement\">async<\/span> ():<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Promise<\/span>string&gt;<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synSpecial\">try<\/span> <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synIdentifier\">const<\/span> position = <span class=\"synStatement\">await<\/span> getCurrentPosition();\n        <span class=\"synIdentifier\">const<\/span> <span class=\"synIdentifier\">{<\/span> <span class=\"synPreProc\">latitude<\/span>, <span class=\"synPreProc\">longitude<\/span> <span class=\"synIdentifier\">}<\/span> = position.coords;\n        <span class=\"synIdentifier\">const<\/span> apiUrl = <span class=\"synConstant\">`https:\/\/api.example.com\/weather?lat=<\/span><span class=\"synStatement\">${<\/span>latitude<span class=\"synStatement\">}<\/span><span class=\"synConstant\">&amp;lon=<\/span><span class=\"synStatement\">${<\/span>longitude<span class=\"synStatement\">}<\/span><span class=\"synConstant\">`<\/span>;\n        <span class=\"synIdentifier\">const<\/span> response = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(apiUrl);\n        <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> response.json();\n        <span class=\"synStatement\">return<\/span> data.weather;\n    <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">catch<\/span> (error) <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synType\">console<\/span>.error(<span class=\"synConstant\">'Error in getCurrentLocationWeather:'<\/span>, error);\n        <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">'Failed to get weather'<\/span>;\n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n\n\n\n\n\n\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> getWeather = <span class=\"synStatement\">async<\/span> ():<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Promise<\/span>string <span class=\"synStatement\">|<\/span> <span class=\"synType\">null<\/span>&gt;<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">const<\/span> weather = <span class=\"synStatement\">await<\/span> getCurrentLocationWeather();    \n    <span class=\"synStatement\">if<\/span> (weather.<span class=\"synStatement\">includes<\/span>(<span class=\"synConstant\">'\u6674'<\/span>)) <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">'\u2600\ufe0f \u826f\u3044\u5929\u6c17\u3067\u3059\uff01'<\/span>;\n    <span class=\"synStatement\">if<\/span> (weather.<span class=\"synStatement\">includes<\/span>(<span class=\"synConstant\">'\u96e8'<\/span>)) <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">'\u2614 \u5098\u304c\u5fc5\u8981\u3067\u3059\uff01'<\/span>;   \n    <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">null<\/span>;\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n[Fugafuga.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> getWeather <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/getWeather'<\/span>\n<span class=\"synIdentifier\">const<\/span> weather = <span class=\"synStatement\">await<\/span> getWeather()\n<\/pre>\n<p>\u4e0a\u8a18\u306b\u95a2\u3057\u3066\u8a00\u3046\u3068<\/p>\n<p><code>getWeather<\/code><\/p>\n<ul>\n<li><strong>\u8cac\u52d9:<\/strong>\u00a0\u5929\u6c17\u60c5\u5831\u3092\u53d6\u5f97\u3057\u3066\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u5909\u63db\u3059\u308b<\/li>\n<li><strong>\u7d50\u5408:<\/strong>\u00a0<code>getCurrentLocationWeather<\/code>\u00a0\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\u304c\u3001\u4e2d\u8eab\uff08\u4f4d\u7f6e\u60c5\u5831\u306e\u53d6\u5f97\u3084fetch\u306e\u8a73\u7d30\uff09\u306f\u77e5\u3089\u306a\u3044\uff08\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\uff09<\/li>\n<li><strong>\u51e6\u7406:<\/strong>\n<ul>\n<li>\u5929\u6c17\u60c5\u5831\u306b\u300c\u6674\u300d\u304c\u542b\u307e\u308c\u3066\u3044\u308c\u3070\u00a0<code>'\u2600\ufe0f \u826f\u3044\u5929\u6c17\u3067\u3059\uff01'<\/code>\u00a0\u3092\u8fd4\u3059<\/li>\n<li>\u5929\u6c17\u60c5\u5831\u306b\u300c\u96e8\u300d\u304c\u542b\u307e\u308c\u3066\u3044\u308c\u3070\u00a0<code>'\u2614 \u5098\u304c\u5fc5\u8981\u3067\u3059\uff01'<\/code>\u00a0\u3092\u8fd4\u3059<\/li>\n<li>\u305d\u308c\u4ee5\u5916\uff08\u30a8\u30e9\u30fc\u6642\u542b\u3080\uff09\u306f\u00a0<code>null<\/code>\u00a0\u3092\u8fd4\u3059<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><code>getCurrentLocationWeather<\/code><\/p>\n<ul>\n<li><strong>\u8cac\u52d9:<\/strong>\u00a0\u73fe\u5728\u5730\u306e\u5929\u6c17\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b<\/li>\n<li><strong>\u7d50\u5408:<\/strong>\u00a0<code>getCurrentPosition<\/code>\u00a0\u3092\u547c\u3073\u51fa\u3057\u3066\u3044\u308b\u304c\u3001\u5185\u90e8\u3067\u00a0<code>navigator.geolocation<\/code>\u00a0\u3092\u3069\u3046\u6271\u3063\u3066\u3044\u308b\u304b\u306f\u77e5\u3089\u306a\u3044\uff08\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\uff09<\/li>\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0:<\/strong>\u00a0\u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u30a8\u30e9\u30fc\u30fb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a8\u30e9\u30fc\u7b49\u3001\u5168\u3066\u306e\u4f8b\u5916\u3092\u6355\u6349\u3057\u00a0<code>'Failed to get weather'<\/code>\u00a0\u3092\u8fd4\u3059<\/li>\n<li><strong>\u51e6\u7406:<\/strong>\n<ol>\n<li>\u4f4d\u7f6e\u60c5\u5831\u3092\u53d6\u5f97<\/li>\n<li>\u7def\u5ea6\u30fb\u7d4c\u5ea6\u3092\u4f7f\u3063\u3066\u5929\u6c17<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>\u3092\u547c\u3073\u51fa\u3057<\/li>\n<li>\u5929\u6c17\u30c7\u30fc\u30bf\u3092\u8fd4\u5374<\/li>\n<li>\u30a8\u30e9\u30fc\u6642\u306f\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8fd4\u5374\uff08\u30a8\u30e9\u30fc\u30ed\u30b0\u3082\u51fa\u529b\uff09<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p><code>getCurrentPosition<\/code><\/p>\n<ul>\n<li><strong>\u8cac\u52d9:<\/strong>\u00a0\u73fe\u5728\u5730\u306e\u4f4d\u7f6e\u60c5\u5831\uff08\u7def\u5ea6\u30fb\u7d4c\u5ea6\u7b49\uff09\u3092\u53d6\u5f97\u3059\u308b<\/li>\n<li><strong><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>:<\/strong>\u00a0<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Web%C9%B8%BD%E0\">Web\u6a19\u6e96<\/a>\u306e<a target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/ja\/docs\/Web\/API\/Geolocation_API\">Geolocation API<\/a>\u306e\u00a0<code>navigator.geolocation.getCurrentPosition<\/code>\u00a0\u3092\u4f7f\u7528<\/li>\n<li><strong>\u8fd4\u308a\u5024:<\/strong>\u00a0<code>GeolocationPositionType<\/code>\u00a0\u578b\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff08\u7def\u5ea6\u30fb\u7d4c\u5ea6\u30fb\u7cbe\u5ea6\u30fb\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u7b49\u3092\u542b\u3080\uff09<\/li>\n<li><strong>\u30a8\u30e9\u30fc:<\/strong>\u00a0\u4f4d\u7f6e\u60c5\u5831\u53d6\u5f97\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u306f Promise \u304c <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/reject\">reject<\/a> \u3055\u308c\u308b<\/li>\n<li>navigator.geolocation.getCurrentPosition\u306f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Web%C9%B8%BD%E0\">Web\u6a19\u6e96<\/a>\u306eGeolocation <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>\u3067\u73fe\u5728\u5730\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002\u8fd4\u308a\u5024\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3059<\/li>\n<\/ul>\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synIdentifier\">const<\/span> position: <span class=\"synIdentifier\">GeolocationPosition<\/span> = <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synStatement\">coords<\/span>: <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">latitude<\/span>: <span class=\"synConstant\">35.67723<\/span>,        \n    <span class=\"synStatement\">longitude<\/span>: <span class=\"synConstant\">139.78572<\/span>,      \n    <span class=\"synStatement\">altitude<\/span>: <span class=\"synConstant\">null<\/span>,            \n    <span class=\"synStatement\">accuracy<\/span>: <span class=\"synConstant\">65<\/span>,              \n    <span class=\"synStatement\">altitudeAccuracy<\/span>: <span class=\"synConstant\">null<\/span>,    \n    <span class=\"synStatement\">heading<\/span>: <span class=\"synConstant\">null<\/span>,             \n    <span class=\"synStatement\">speed<\/span>: <span class=\"synConstant\">null<\/span>               \n  <span class=\"synIdentifier\">}<\/span>,\n  <span class=\"synStatement\">timestamp<\/span>: <span class=\"synConstant\">1704067200000<\/span>    \n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n<p>\u4e0a\u8a18\u304c\u4e3b\u306a\u7d50\u5408\u5ea6\u306e\u30d1\u30bf\u30fc\u30f3\u306e\u89e3\u8aac\u3067\u3059\u3002<br \/>\n<span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/h\/hayakatsu0120\/20251019\/20251019204623.png\" width=\"692\" height=\"574\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><\/p>\n<ul>\n<li>\u5185\u5bb9\u7d50\u5408(\u6700\u60aa)<\/li>\n<li>\u5171\u901a\u7d50\u5408(\u3068\u3066\u3082\u60aa\u3044)<\/li>\n<li>\u5916\u90e8\u7d50\u5408(\u53ef\u80fd\u306a\u9650\u308a\u907f\u3051\u308b\u3079\u304d)<\/li>\n<li>\u5236\u5fa1\u7d50\u5408(\u53ef\u80fd\u306a\u9650\u308a\u907f\u3051\u308b\u3079\u304d)<\/li>\n<li>\u30b9\u30bf\u30f3\u30d7\u7d50\u5408(\u4e2d\u7a0b\u5ea6)<\/li>\n<li>\u30c7\u30fc\u30bf\u7d50\u5408\uff08\u7406\u60f3\u7684\uff09<\/li>\n<li>\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\uff08\u6700\u3082\u7406\u60f3\u7684\uff09<\/li>\n<\/ul>\n<p>\u4e0b\u306b\u884c\u3051\u3070\u884c\u304f\u307b\u3069\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C1%C2%B7%EB%B9%E7\">\u758e\u7d50\u5408<\/a>(\u7d50\u5408\u5ea6\u4f4e)\u306b\u306a\u308a\u3001\u4e0a\u306b\u884c\u3051\u3070\u884c\u304f\u307b\u3069\u5bc6\u7d50\u5408(\u7d50\u5408\u5ea6\u9ad8)\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u51dd\u96c6\u5ea6\u304c\u6a5f\u80fd\u7684\u51dd\u96c6\u306e\u307f\u3067\u69cb\u6210\u51fa\u6765\u306a\u3044\u306e\u3068\u540c\u3058\u3088\u3046\u306b<\/p>\n<p>\u7d50\u5408\u5ea6\u3082\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\u3060\u3051\u3067\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u69cb\u6210\u3059\u308b\u3053\u3068\u306f\u51fa\u6765\u7121\u3044\u70ba\u3001\u306a\u308b\u3079\u304f\u3001\u7d50\u5408\u5ea6\u3092\u4e0b\u3052\u308b\u3001\u4e0b\u3052\u304d\u308c\u306a\u3044\u3082\u306e\u306f\u5c0f\u3055\u304f\u4fdd\u3064\u306e\u304c\u5927\u4e8b\u306b\u306a\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n<h2 id=\"\u6539\u5584\u4f8b\"><strong>\u6539\u5584\u4f8b<\/strong><\/h2>\n<p>\u3053\u3053\u3067\u306f\u4e0a\u8a18\u3067\u7d39\u4ecb\u3057\u305f\u5bc6\u7d50\u5408\u3092\u6539\u5584\u3057\u3066\u3044\u304f\u306b\u306f\uff1f\u3063\u3066\u3044\u3046\u4f8b\u3092\u793a\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u3042\u304f\u307e\u3067\u4e00\u4f8b\u306a\u306e\u3067\u3054\u7559\u610f\u4e0b\u3055\u3044\u3002\u3002\u3002<\/p>\n<h2 id=\"\u5185\u90e8\u7d50\u5408\u4f8b1\u30c7\u30fc\u30bf\u7d50\u5408\">\u5185\u90e8\u7d50\u5408(\u4f8b1)\u2192\u30c7\u30fc\u30bf\u7d50\u5408<\/h2>\n<p>\u3053\u3061\u3089\u306f\u4e0a\u8a18\u3067\u793a\u3057\u305f\u30af\u30e9\u30b9\u306eprivate\u5909\u6570\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u5185\u90e8\u7d50\u5408\u306e\u4f8b\u3067\u3059\u3002<\/p>\n[User.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> User <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">data<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synIdentifier\">name<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span> <span class=\"synIdentifier\">email<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span> <span class=\"synIdentifier\">address<\/span>: <span class=\"synType\">string<\/span> <span class=\"synIdentifier\">}<\/span>;\n\n  <span class=\"synIdentifier\">constructor<\/span>(<span class=\"synPreProc\">name<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> email<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> address<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synType\">this<\/span>.data = <span class=\"synIdentifier\">{<\/span> <span class=\"synStatement\">name<\/span>, <span class=\"synStatement\">email<\/span>, <span class=\"synStatement\">address <\/span><span class=\"synIdentifier\">}<\/span>;\n  <span class=\"synIdentifier\">}<\/span>\n    \n  .\n  .\n  .\n  <span class=\"synIdentifier\">\u4ed6\u306e\u51e6\u7406<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Hoge\">Hoge<\/a>.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> User <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/User'<\/span>;\n\n<span class=\"synIdentifier\">const<\/span> user = <span class=\"synIdentifier\">new<\/span> User(<span class=\"synConstant\">\"Alice\"<\/span>, <span class=\"synConstant\">\"alice@example.com\"<\/span>, <span class=\"synConstant\">\"Tokyo\"<\/span>)\n\n\n<span class=\"synIdentifier\">const<\/span> address = (user <span class=\"synSpecial\">as<\/span> <span class=\"synType\">any<\/span>).data.address;\n<\/pre>\n<p>\u3053\u3061\u3089\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30c7\u30fc\u30bf\u7d50\u5408\u306b\u30ea\u30d5\u30a1\u30af\u30bf\u304c\u51fa\u6765\u307e\u3059\u3002<\/p>\n<p>\u305d\u3082\u305d\u3082\u304cUser<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9\">\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9<\/a>\u3092\u4f5c\u308b\u969b\u306b\u5fc5\u8981\u306a\u5024\u3060\u3051\u3092\u6e21\u3057\u3066\u3044\u308b\u30c7\u30fc\u30bf\u7d50\u5408\u306a\u306e\u3067\u3001<\/p>\n<p>getter\u3092\u4f5c\u3063\u3066\u3042\u3052\u308b\u3060\u3051\u3067\u5927\u4e08\u592b\u3067\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001readonly\u3092\u3064\u3051\u3066<code>private readonly name: string;<\/code>\u307f\u305f\u3044\u306a\u611f\u3058\u306b\u3057\u3066\u3082\u826f\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3057\u3001user\u30a4\u30f3\u30bf\u30f3\u30b9\u4f5c\u6210\u6642\u306b\u6e21\u3059\u5024\u3092UserType\u306a\u3069\u306e\u578b\u306b\u7e8f\u3081\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u3057\u3066\u6e21\u3057\u3066\u3082\u826f\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n[User.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> User <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">name<\/span>: <span class=\"synType\">string<\/span>;\n  <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">email<\/span>: <span class=\"synType\">string<\/span>;\n  <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">address<\/span>: <span class=\"synType\">string<\/span>;\n\n  <span class=\"synIdentifier\">constructor<\/span>(<span class=\"synPreProc\">name<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> email<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> address<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synType\">this<\/span>.<span class=\"synStatement\">name<\/span> = <span class=\"synType\">name<\/span>;\n    <span class=\"synType\">this<\/span>.email = email;\n    <span class=\"synType\">this<\/span>.address = address;\n  <span class=\"synIdentifier\">}<\/span>\n\n  \n  <span class=\"synIdentifier\">getAddress<\/span>(): <span class=\"synType\">string<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">return<\/span> <span class=\"synType\">this<\/span>.address;\n  <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Hoge\">Hoge<\/a>.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> User <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/User'<\/span>;\n<span class=\"synIdentifier\">const<\/span> user = <span class=\"synIdentifier\">new<\/span> User(<span class=\"synConstant\">\"Alice\"<\/span>, <span class=\"synConstant\">\"alice@example.com\"<\/span>, <span class=\"synConstant\">\"Tokyo\"<\/span>);\n\n\n\n\n<span class=\"synIdentifier\">const<\/span> address = user.getAddress();\n<span class=\"synType\">console<\/span>.<span class=\"synStatement\">log<\/span>(address); \n<\/pre>\n<h2 id=\"\u5185\u90e8\u7d50\u5408\u4f8b2\u30c7\u30fc\u30bf\u7d50\u5408\">\u5185\u90e8\u7d50\u5408(\u4f8b2)\u2192\u30c7\u30fc\u30bf\u7d50\u5408<\/h2>\n<p>\u3053\u3061\u3089\u306f\u4e0a\u8a18\u3067\u793a\u3057\u305f\u30af\u30e9\u30b9\u306eprivate\u30e1\u30bd\u30c3\u30c9\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3057\u307e\u3063\u3066\u3044\u308b\u5185\u90e8\u7d50\u5408\u306e\u4f8b\u3067\u3059\u3002<\/p>\n[Calculator.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> Calculator <span class=\"synIdentifier\">{<\/span>\n \n  <span class=\"synIdentifier\">addDoubled<\/span>(<span class=\"synPreProc\">a<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> b<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">return<\/span> <span class=\"synType\">this<\/span>.double(a) + <span class=\"synType\">this<\/span>.double(b); \n  <span class=\"synIdentifier\">}<\/span>\n  \n   <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">double<\/span>(<span class=\"synPreProc\">x<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>) <span class=\"synIdentifier\">{<\/span> \n\u3000\u3000\u3000<span class=\"synStatement\">return<\/span> x * <span class=\"synConstant\">2<\/span>; \n\u3000<span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[Fuga.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> Calculator <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/Calculator'<\/span>;\n<span class=\"synIdentifier\">const<\/span> calc = <span class=\"synIdentifier\">new<\/span> Calculator();\n<span class=\"synType\">console<\/span>.<span class=\"synStatement\">log<\/span>((calc <span class=\"synSpecial\">as<\/span> <span class=\"synType\">any<\/span>).double(<span class=\"synConstant\">5<\/span>)); \n<\/pre>\n<p>\u3053\u3061\u3089\u306f\u30b7\u30f3\u30d7\u30eb\u306a\u4f5c\u308b\u306a\u306e\u3067\u5206\u304b\u308a\u3084\u3059\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u7d14\u7c8b\u306bCalculator\u30af\u30e9\u30b9\u3067\u3059\u3057\u30012\u500d\u306b\u3057\u305f\u8a08\u7b97\u3092\u4f7f\u3044\u305f\u3044\u306a\u3089public\u306b\u3057\u3066\u3042\u3052\u308c\u3070\u826f\u3044\u3060\u3051\u3067\u3059\u306d\u3002<\/p>\n<p>\u3082\u3057\u4eee\u306bprivate\u30e1\u30bd\u30c3\u30c9\u306b\u89e6\u308a\u305f\u304f\u306a\u304f\u3066\u3001\u5b9f\u884c\u7d50\u679c\u306e\u307f\u304c\u6b32\u3057\u3044\u5834\u5408\u306f\u305d\u308c\u3092\u5b9f\u884c\u3057\u3066\u5024\u3092\u8fd4\u3059\u5185\u90e8\u7d50\u5408(\u4f8b1)\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u307f\u305f\u3044\u306agetter\u30e1\u30bd\u30c3\u30c9\u3092\u4f5c\u308b\u5834\u5408\u3082\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n[Calculator.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> Calculator <span class=\"synIdentifier\">{<\/span>\n \n  <span class=\"synIdentifier\">addDoubled<\/span>(<span class=\"synPreProc\">a<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> b<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">return<\/span> <span class=\"synType\">this<\/span>.double(a) + <span class=\"synType\">this<\/span>.double(b); \n  <span class=\"synIdentifier\">}<\/span>\n  \n  <span class=\"synIdentifier\">double<\/span>(<span class=\"synPreProc\">x<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span>) <span class=\"synIdentifier\">{<\/span> \n\u3000\u3000<span class=\"synStatement\">return<\/span> x * <span class=\"synConstant\">2<\/span>; \n  <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[Fuga.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">import<\/span> <span class=\"synIdentifier\">{<\/span> Calculator <span class=\"synIdentifier\">}<\/span> <span class=\"synSpecial\">from<\/span> <span class=\"synConstant\">'.\/Calculator'<\/span>;\n<span class=\"synIdentifier\">const<\/span> calc = <span class=\"synIdentifier\">new<\/span> Calculator();\n<span class=\"synType\">console<\/span>.<span class=\"synStatement\">log<\/span>(calc.double(<span class=\"synConstant\">5<\/span>));\n<\/pre>\n<h2 id=\"\u5916\u90e8\u7d50\u5408\u30c7\u30fc\u30bf\u7d50\u5408\">\u5916\u90e8\u7d50\u5408\u2192\u30c7\u30fc\u30bf\u7d50\u5408<\/h2>\n<p>\u3053\u3061\u3089\u306f\u4e0a\u8a18\u3067\u793a\u3057\u305f\u5916\u90e8\u7d50\u5408\u306e\u7d50\u5408\u5ea6\u3092\u4e0b\u3052\u308b\u306b\u306f<\/p>\n[Login.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> loginUser = <span class=\"synStatement\">async<\/span> (<span class=\"synPreProc\">email<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> password<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>)<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">const<\/span> response = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(<span class=\"synConstant\">'https:\/\/api.example.com\/auth\/login'<\/span>, <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">method<\/span>: <span class=\"synConstant\">'POST'<\/span>,\n    <span class=\"synStatement\">headers<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synConstant\">'Content-Type'<\/span>: <span class=\"synConstant\">'application\/json'<\/span> <span class=\"synIdentifier\">}<\/span>,\n    <span class=\"synStatement\">body<\/span>: <span class=\"synType\">JSON<\/span>.<span class=\"synStatement\">stringify<\/span>(<span class=\"synIdentifier\">{<\/span> <span class=\"synStatement\">email<\/span>, <span class=\"synStatement\">password <\/span><span class=\"synIdentifier\">}<\/span>)\n  <span class=\"synIdentifier\">}<\/span>);\n\n  <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> response.json();\n\n  <span class=\"synStatement\">if<\/span> (data.success) <span class=\"synIdentifier\">{<\/span>\n    localStorage.<span class=\"synStatement\">setItem<\/span>(<span class=\"synConstant\">'token'<\/span>, data.data.access_token);\n    \n    \n    <span class=\"synStatement\">return<\/span> data.data.user_info; \n  <span class=\"synIdentifier\">}<\/span>\n  <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(data.message);\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n[AuthStatus.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> checkAuthStatus = <span class=\"synStatement\">async<\/span> ()<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">const<\/span> token = localStorage.<span class=\"synStatement\">getItem<\/span>(<span class=\"synConstant\">'token'<\/span>);\n  <span class=\"synStatement\">if<\/span> (!token) <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">false<\/span>;\n\n  <span class=\"synIdentifier\">const<\/span> response = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(<span class=\"synConstant\">'https:\/\/api.example.com\/auth\/status'<\/span>, <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">method<\/span>: <span class=\"synConstant\">'POST'<\/span>,\n    <span class=\"synStatement\">headers<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synConstant\">'Authorization'<\/span>: <span class=\"synConstant\">`Bearer <\/span><span class=\"synStatement\">${<\/span>token<span class=\"synStatement\">}<\/span><span class=\"synConstant\">`<\/span> <span class=\"synIdentifier\">}<\/span>\n  <span class=\"synIdentifier\">}<\/span>);\n\n  <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> response.json();\n  \n  <span class=\"synStatement\">return<\/span> data.success &amp;&amp; data.data.valid;\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n<h3 id=\"\u6539\u5584\u4f8b-1\">[\u6539\u5584\u4f8b]<\/h3>\n<p>\u4ee5\u4e0b\u306e\u69d8\u306b\u307e\u305a\u3001UserAuth\u7cfb\u306e\u30ed\u30b8\u30c3\u30af\u3092\u7e8f\u3081\u3066\u3001\u91cd\u8907\u3057\u3066\u3044\u308burl\u90e8\u5206\u3082\u5b9a\u6570\u306b\u3057\u3066\u3042\u3052\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u306b\u3088\u308a\u4e00\u5143\u7ba1\u7406\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n[UserAuthConst.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">type <\/span><span class=\"synIdentifier\">UserType <\/span><span class=\"synStatement\">=<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">id<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synIdentifier\">email<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synIdentifier\">name<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n\n<span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">type <\/span><span class=\"synIdentifier\">LoginApiResponseType <\/span><span class=\"synStatement\">=<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">data<\/span>: <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synIdentifier\">access_token<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synIdentifier\">user_info<\/span>: <span class=\"synIdentifier\">{<\/span>\n            <span class=\"synIdentifier\">id<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n            <span class=\"synIdentifier\">email<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n            <span class=\"synIdentifier\">full_name<\/span>: <span class=\"synType\">string<\/span><span class=\"synStatement\">;<\/span>\n        <span class=\"synIdentifier\">}<\/span><span class=\"synStatement\">;<\/span>\n    <span class=\"synIdentifier\">}<\/span><span class=\"synStatement\">;<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> USER_AUTH_URL = <span class=\"synConstant\">'https:\/\/api.example.com\/auth'<\/span>;\n<\/pre>\n[UserAuth.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">class<\/span> UserAuth <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">login<\/span>(<span class=\"synPreProc\">email<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> password<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>): <span class=\"synIdentifier\">Promise<\/span>UserType&gt; <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synIdentifier\">const<\/span> res = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(<span class=\"synConstant\">`<\/span><span class=\"synStatement\">${<\/span>USER_AUTH_URL<span class=\"synStatement\">}<\/span><span class=\"synConstant\">\/login`<\/span>, <span class=\"synIdentifier\">{<\/span>\n            <span class=\"synStatement\">method<\/span>: <span class=\"synConstant\">'POST'<\/span>,\n            <span class=\"synStatement\">headers<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synConstant\">'Content-Type'<\/span>: <span class=\"synConstant\">'application\/json'<\/span> <span class=\"synIdentifier\">}<\/span>,\n            <span class=\"synStatement\">body<\/span>: <span class=\"synType\">JSON<\/span>.<span class=\"synStatement\">stringify<\/span>(<span class=\"synIdentifier\">{<\/span> <span class=\"synStatement\">email<\/span>, <span class=\"synStatement\">password <\/span><span class=\"synIdentifier\">}<\/span>),\n        <span class=\"synIdentifier\">}<\/span>);\n        <span class=\"synStatement\">if<\/span> (!res.ok) <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(<span class=\"synConstant\">'login error'<\/span>);\n        <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> res.json();\n        <span class=\"synStatement\">if<\/span> (!isLoginApiResponse(data)) <span class=\"synIdentifier\">{<\/span>\n            <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(<span class=\"synConstant\">'Invalid API response format'<\/span>);\n        <span class=\"synIdentifier\">}<\/span>\n        <span class=\"synIdentifier\">const<\/span> user = formatUserFromApiResponse(data)\n        localStorage.<span class=\"synStatement\">setItem<\/span>(<span class=\"synConstant\">'token'<\/span>, user.accessToken);\n        <span class=\"synStatement\">return<\/span> user;\n    <span class=\"synIdentifier\">}<\/span>\n\n    \n    <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">checkAuthStatus<\/span>() <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synIdentifier\">const<\/span> token = localStorage.<span class=\"synStatement\">getItem<\/span>(<span class=\"synConstant\">'token'<\/span>);\n        <span class=\"synStatement\">if<\/span> (!token) <span class=\"synStatement\">return<\/span> <span class=\"synConstant\">false<\/span>;\n\n        <span class=\"synIdentifier\">const<\/span> res = <span class=\"synStatement\">await<\/span> <span class=\"synType\">fetch<\/span>(<span class=\"synConstant\">`<\/span><span class=\"synStatement\">${<\/span>USER_AUTH_URL<span class=\"synStatement\">}<\/span><span class=\"synConstant\">\/status`<\/span>, <span class=\"synIdentifier\">{<\/span>\n            <span class=\"synStatement\">method<\/span>: <span class=\"synConstant\">'POST'<\/span>,\n            <span class=\"synStatement\">headers<\/span>: <span class=\"synIdentifier\">{<\/span> <span class=\"synStatement\">Authorization<\/span>: <span class=\"synConstant\">`Bearer <\/span><span class=\"synStatement\">${<\/span>token<span class=\"synStatement\">}<\/span><span class=\"synConstant\">`<\/span> <span class=\"synIdentifier\">}<\/span>,\n        <span class=\"synIdentifier\">}<\/span>);\n\n        <span class=\"synStatement\">if<\/span> (!res.ok) <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(<span class=\"synConstant\">'check auth error'<\/span>);\n        <span class=\"synIdentifier\">const<\/span> data = <span class=\"synStatement\">await<\/span> res.json();\n        <span class=\"synStatement\">return<\/span> data.success &amp;&amp; data.data.valid;\n    <span class=\"synIdentifier\">}<\/span>\n    \n    <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">isLoginApiResponse<\/span>(<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">unknown<\/span>): <span class=\"synIdentifier\">data<\/span> <span class=\"synStatement\">is<\/span> <span class=\"synIdentifier\">LoginApiResponseType<\/span> <span class=\"synIdentifier\">{<\/span>\n        \n    <span class=\"synIdentifier\">}<\/span>\n    \n    <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">formatUserFromApiResponse<\/span>(<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">LoginApiResponseType<\/span>): <span class=\"synIdentifier\">UserType{<\/span>\n        <span class=\"synIdentifier\">const<\/span> userInfo = data.data.user_info;\n        <span class=\"synIdentifier\">const<\/span> accessToken = data.data.access_token\n        <span class=\"synStatement\">return<\/span> <span class=\"synIdentifier\">{<\/span>\n            <span class=\"synStatement\">id<\/span>: userInfo.<span class=\"synStatement\">id<\/span>,\n            <span class=\"synStatement\">email<\/span>: userInfo.email,\n            <span class=\"synStatement\">name<\/span>: userInfo.full_name,\n            <span class=\"synStatement\">accessToken<\/span>,\n        <span class=\"synIdentifier\">}<\/span>;\n<span class=\"synIdentifier\">}<\/span>;\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u305d\u306e\u4e0a\u3067formatUserFromApiResponse\u306e\u69d8\u306b\u5916\u90e8\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/api\">api<\/a>\u304b\u3089\u6765\u305f\u5024\u3092\u5185\u90e8\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u683c\u7d0d\u3057\u76f4\u305b\u3070UserAuth.ts\u304b\u3089\u53d6\u5f97\u3067\u304d\u308b\u5024\u306b\u4eee\u306b\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u3057\u3066\u3082\u547c\u3073\u51fa\u3057\u3066\u4f7f\u3063\u3066\u3044\u308b\u30e2\u30b8\u30e5\u30fc\u30ebA\u306f\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u306a\u304f\u306a\u308a\u3001UserAuth.ts\u5185\u306e\u307f\u306e\u4fee\u6b63\u3067\u4e0a\u624b\u304f\u3044\u304d\u305d\u3046\u3067\u3059\u3002<br \/>\n\u53d6\u5f97\u3057\u305f\u60c5\u5831\u306egetter\u3092\u4f5c\u3063\u305f\u308a\u3059\u308b\u306e\u3082\u826f\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306d\u3002<\/p>\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">private formatUserFromApiResponse(data: LoginApiResponseType): UserType<span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">const<\/span> userInfo = data.data.user_info;\n    <span class=\"synStatement\">return<\/span> <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synStatement\">id<\/span>: userInfo.<span class=\"synStatement\">id<\/span>,\n        <span class=\"synStatement\">email<\/span>: userInfo.email,\n        <span class=\"synStatement\">name<\/span>: userInfo.full_name,\n    <span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n[\u30e2\u30b8\u30e5\u30fc\u30ebA]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synIdentifier\">const<\/span> loginUser = <span class=\"synStatement\">await<\/span> <span class=\"synIdentifier\">new<\/span> UserAuth().login(<span class=\"synConstant\">'email'<\/span>, <span class=\"synConstant\">'password'<\/span>)\n\n<span class=\"synIdentifier\">const<\/span> funcA() <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">const<\/span> id = loginUser.<span class=\"synStatement\">id<\/span>\n    \n<span class=\"synIdentifier\">}<\/span>\n\n<span class=\"synIdentifier\">const<\/span> funcB() <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synIdentifier\">const<\/span> id = loginUser.<span class=\"synStatement\">id<\/span>\n    \n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u4e0a\u8a18\u306fUser\u60c5\u5831\u306e\u4f8b\u306a\u306e\u3067\u3001\u81ea\u793e\u30d7\u30ed\u30c0\u30af\u30c8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3078\u306e\u901a\u4fe1\u306e\u4f8b\u3068\u306a\u308a\u307e\u3059\u304c\u3001<\/p>\n<p>\u81ea\u793e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3082\u306e\u4ee5\u5916\u306e\u5916\u90e8<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/API\">API<\/a>\u3068\u901a\u4fe1\u3059\u308b\u5834\u5408\u306b\u306f\u5c1a\u306e\u3053\u3068\u5916\u90e8\u7d50\u5408\u306e\u7d50\u5408\u5ea6\u3092\u4e0b\u3052\u308b\u306e\u306f\u4fdd\u5b88\u6027\u3092\u4e0a\u3052\u308b\u305f\u3081\u306b\u306f\u91cd\u8981\u306b\u306a\u3063\u3066\u304d\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u30d6\u30ed\u30b0\u4f5c\u6210\u7d42\u76e4\u306b\u306a\u3063\u3066\u6c17\u3065\u3044\u305f\u306e\u3067\u3001\u307e\u305f\u6a5f\u4f1a\u304c\u3042\u308c\u3070\u305d\u3046\u3086\u3046\u4f8b\u3082\u4f5c\u308c\u305f\u3089\u306a\u3063\u3066\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"\u5236\u5fa1\u7d50\u5408\u4f8b1\u30c7\u30fc\u30bf\u7d50\u5408\">\u5236\u5fa1\u7d50\u5408(\u4f8b1)\u2192\u30c7\u30fc\u30bf\u7d50\u5408<\/h2>\n<p>\u3053\u3061\u3089\u306f\u4e0a\u8a18\u3067\u793a\u3057\u305f\u5236\u5fa1\u7d50\u5408\u306e\u7d50\u5408\u5ea6\u3092\u4e0b\u3052\u308b\u306b\u306f<\/p>\n[DataFormat.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synStatement\">class<\/span> DataFormat <span class=\"synIdentifier\">{<\/span>\n  <span class=\"synIdentifier\">process<\/span>(<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>[]<span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> mode<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'csv'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span> <span class=\"synStatement\">else<\/span> <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'json'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span> <span class=\"synStatement\">else<\/span> <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'xml'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span> <span class=\"synStatement\">else<\/span> <span class=\"synStatement\">if<\/span> (mode === <span class=\"synConstant\">'text'<\/span>) <span class=\"synIdentifier\">{<\/span>\n      \n    <span class=\"synIdentifier\">}<\/span>\n    <span class=\"synSpecial\">throw<\/span> <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">Error<\/span>(<span class=\"synConstant\">'Unknown mode'<\/span>);\n  <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n\n\n<span class=\"synIdentifier\">const<\/span> processor = <span class=\"synIdentifier\">new<\/span> DataFormat();\n<span class=\"synIdentifier\">const<\/span> csvResult = processor.process(<span class=\"synIdentifier\">[<\/span><span class=\"synConstant\">'a'<\/span>, <span class=\"synConstant\">'b'<\/span>, <span class=\"synConstant\">'c'<\/span><span class=\"synIdentifier\">]<\/span>, <span class=\"synConstant\">'csv'<\/span>);\n<span class=\"synIdentifier\">const<\/span> jsonResult = processor.process(<span class=\"synIdentifier\">[<\/span><span class=\"synConstant\">'a'<\/span>, <span class=\"synConstant\">'b'<\/span>, <span class=\"synConstant\">'c'<\/span><span class=\"synIdentifier\">]<\/span>, <span class=\"synConstant\">'json'<\/span>);\n<\/pre>\n[\u6539\u5584\u4f8b]\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5206\u5272\u3057\u307e\u3059\u3002\u305d\u3046\u3057\u305f\u3089\u3001\u5358\u4e00\u8cac\u4efb\u7684\u306b\u51fa\u6765\u308b\u3057\u53ef\u8aad\u6027\u3082\u4e0a\u304c\u308a\u307e\u3059\u3002<\/p>\n<p>\u3053\u3061\u3089\u306f\u30c7\u30fc\u30bf\u7d50\u5408\u3067\u3059\u3002<\/p>\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> csvFormatter = (<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>[])<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n    \n<span class=\"synIdentifier\">}<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> jsonFormatter = (<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>[])<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n    \n<span class=\"synIdentifier\">}<\/span>\n\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> textFormatter = (<span class=\"synPreProc\">data<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>[])<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n    \n<span class=\"synIdentifier\">}<\/span>\n\n<span class=\"synIdentifier\">const<\/span> csv = csvFormatter(data)\n<span class=\"synIdentifier\">const<\/span> json = jsonFormatter(data)\n<\/pre>\n<h2 id=\"\u30e9\u30c3\u30d7\u3067\u53ef\u8aad\u6027\u3092\u4e0a\u3052\u308b\">\u30e9\u30c3\u30d7\u3067\u53ef\u8aad\u6027\u3092\u4e0a\u3052\u308b<\/h2>\n<p>\u30b3\u30fc\u30c9\u304c\u4f3c\u3066\u3044\u308b\u5834\u5408\u3001\u62bd\u8c61\u5316\u3059\u308b\u3053\u3068\u306f\u3088\u304f\u3042\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u51e6\u7406\u306f\u5f15\u6570\u306b\u3088\u3063\u3066\u632f\u308b\u821e\u3044\u3092\u5909\u3048\u308b\u3068\u601d\u3046\u306e\u3067\u3059\u304c\u3001\u5f15\u6570\u304c\u5897\u3048\u3066\u304f\u308b\u3068\u30d1\u30c3\u3068\u898b\u3067\u3001\u305d\u306e\u51e6\u7406\u304c\u3069\u3063\u3061\u306a\u306e\u304b\u8a8d\u77e5\u3057\u8f9b\u304b\u3063\u305f\u308a\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u4f8b\u3048\u3070<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/MPA\">MPA<\/a>\u30b5\u30a4\u30c8\u3067\u524a\u9664\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u5ea6\u306bform\u304c\u9001\u4fe1\u3055\u308c\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u308b\u30b5\u30a4\u30c8\u304c\u3042\u3063\u305f\u3068\u3057\u307e\u3059(\u753b\u50cf\u3092\u4e0a\u66f8\u304d\u3059\u308b\u3053\u3068\u306f\u51fa\u6765\u305a\u3001\u4e00\u56de\u524a\u9664\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u30b5\u30a4\u30c8\u4ed5\u69d8)<\/p>\n<p>\u524a\u9664\u306e\u969b\u306enetwork\u306e\u52d5\u304d\u306fform\u306einput\u30bf\u30b0\u304c\u6301\u3063\u3066\u3044\u308bdeleteKey\u3092FormData\u306bappend\u3057\u3066post\u30ea\u30af<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A8%A5%B9\">\u30a8\u30b9<\/a>\u30c8\u3057\u3066\u66f4\u65b0\u3055\u308c\u305fform\u304cget\u3055\u308c\u308b\u30b5\u30a4\u30c8\u4ed5\u69d8\u3067\u3059\u3002<\/p>\n<p><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%B3%C8%C4%A5%B5%A1%C7%BD\">\u62e1\u5f35\u6a5f\u80fd<\/a>\u3067\u624b\u52d5\u64cd\u4f5c\u3092\u6a21\u5023\u3057\u305f\u753b\u50cf\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e1\u30bd\u30c3\u30c9\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li>getFormHtml\n<ul>\n<li>\u30eb\u30fc\u30d7\u5185\u3067\u66f4\u65b0\u3055\u308c\u305fform\u3092\u53d6\u5f97\n<ul>\n<li>\u672c\u6765\u306f\u30eb\u30fc\u30d7\u3067form\u3092\u4f55\u5ea6\u3082\u53d6\u5f97\u3057\u305f\u304f\u306a\u3044\u3093\u3067\u3059\u304c\u3001\u30b5\u30a4\u30c8\u4ed5\u69d8\u81ea\u4f53\u304c\u524a\u9664\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u518d<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%EC%A5%F3%A5%C0%A5%EA%A5%F3%A5%B0\">\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0<\/a>\u3055\u308c\u308b\u4ed5\u69d8\u3067\u3059\u3002<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%B3%C8%C4%A5%B5%A1%C7%BD\">\u62e1\u5f35\u6a5f\u80fd<\/a>\u5185\u3067\u306fpost\u30ea\u30af<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A8%A5%B9\">\u30a8\u30b9<\/a>\u30c8\u3092\u9001\u3063\u3066\u3044\u308b\u3060\u3051\u3067get\u51e6\u7406\u306f\u8d70\u3063\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u672c\u6765\u306e\u30b5\u30a4\u30c8\u4ed5\u69d8\u3068\u540c\u3058\u52d5\u304d\u306a\u306e\u3067\u30eb\u30fc\u30d7\u5185\u3067get\u51e6\u7406\u3092\u3059\u308b\u4e8b\u3092\u8a31\u5bb9\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>deleteInputName\n<ul>\n<li>delete\u3059\u308bimageInput\u3092\u53d6\u5f97<\/li>\n<\/ul>\n<\/li>\n<li>formData\u306bappend\u3057\u3066post\u30ea\u30af<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A8%A5%B9\">\u30a8\u30b9<\/a>\u30c8<\/li>\n<\/ul>\n[ImageFunc.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n\n<span class=\"synSpecial\">@remarks<\/span>\n\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> resetImages = <span class=\"synStatement\">async<\/span> (\n<span class=\"synPreProc\">    imgModalApiUrl<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span><span class=\"synStatement\">,<\/span>\n<span class=\"synPreProc\">    imageLimit<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">number<\/span><span class=\"synStatement\">,<\/span>\n<span class=\"synPreProc\">    deleteKey<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synConstant\">'delete_gaikan'<\/span><span class=\"synPreProc\"> <\/span><span class=\"synStatement\">|<\/span><span class=\"synPreProc\"> <\/span><span class=\"synConstant\">'delete_naikan'<\/span><span class=\"synStatement\">,<\/span>\n<span class=\"synPreProc\">    deleteFormVal<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synConstant\">'\u5916\u89b3\u524a\u9664'<\/span><span class=\"synPreProc\"> <\/span><span class=\"synStatement\">|<\/span><span class=\"synPreProc\"> <\/span><span class=\"synConstant\">'\u5185\u89b3\u524a\u9664'<\/span>\n)<span class=\"synPreProc\"> <\/span><span class=\"synType\">=&gt;<\/span> <span class=\"synIdentifier\">{<\/span>\n    <span class=\"synStatement\">for<\/span> (<span class=\"synIdentifier\">let<\/span> i = <span class=\"synConstant\">0<\/span><span class=\"synStatement\">;<\/span> i ; i++) <span class=\"synIdentifier\">{<\/span>\n    \n    <span class=\"synIdentifier\">const<\/span> form = <span class=\"synStatement\">await<\/span> getFormHtml(imgModalApiUrl);\n        <span class=\"synIdentifier\">const<\/span> deleteInputName = form\n            .<span class=\"synStatement\">querySelector<\/span>(<span class=\"synConstant\">`input[name^=\"<\/span><span class=\"synStatement\">${<\/span>deleteKey<span class=\"synStatement\">}<\/span><span class=\"synConstant\">\"]`<\/span>)\n            ?.getAttribute(<span class=\"synConstant\">'name'<\/span>);\n        <span class=\"synStatement\">if<\/span> (!deleteInputName) <span class=\"synStatement\">break<\/span>;\n        <span class=\"synIdentifier\">const<\/span> formData = <span class=\"synIdentifier\">new<\/span> <span class=\"synType\">FormData<\/span>(form);\n        formData.<span class=\"synStatement\">append<\/span>(deleteInputName, deleteFormVal);\n        \n       <span class=\"synStatement\">await<\/span> postForm(imgModalApiUrl, formData);\n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>;\n<\/pre>\n<p>\u4e0a\u8a18\u306fformData\u306e\u5fae\u5999\u306a\u9055\u3044\u3084<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/api\">api<\/a>\u3078\u306eurl\u306f\u9055\u3048\u3069\u3001\u753b\u50cf\u3092\u524a\u9664\u3059\u308b\u51e6\u7406\u3068\u3057\u3066\u91cd\u8907\u3059\u308b\u90e8\u5206\u304c\u591a\u3044\u306e\u3067\u62bd\u8c61\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3053\u3061\u3089\u3092\u547c\u3073\u51fa\u3059\u3068\u3057\u305f\u3089\u547c\u3073\u51fa\u3057\u5143\u306f\u30a4\u30e1\u30fc\u30b8\u4ee5\u4e0b\u307f\u305f\u3044\u306a\u5f62\u306b\u306a\u308b\u3068\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u3061\u3089\u306f\u30c7\u30fc\u30bf\u7d50\u5408\u3067\u3059\u3002<\/p>\n[const.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> APPEARANCE_IMAGE_URL = <span class=\"synConstant\">'exampleAppearanceUrl'<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> APPEARANCE_IMAGE_LIMIT = <span class=\"synConstant\">5<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> APPEARANCE_IMAGE_DELETE_KEY = <span class=\"synConstant\">'delete_gaikan'<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> APPEARANCE_IMAGE_DELETE_VAL = <span class=\"synConstant\">'\u5916\u89b3'<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> ROOM_IMAGE_URL = <span class=\"synConstant\">'exampleRoomUrl'<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> ROOM_IMAGE_LIMIT = <span class=\"synConstant\">5<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> ROOM_IMAGE_DELETE_KEY = <span class=\"synConstant\">'delete_naikan'<\/span>\n<span class=\"synSpecial\">export<\/span> <span class=\"synIdentifier\">const<\/span> ROOM_IMAGE_DELETE_VAL = <span class=\"synConstant\">'\u5185\u89b3'<\/span>\n<\/pre>\n[AppearanceImage.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">default<\/span> <span class=\"synStatement\">class<\/span> AppearanceImage <span class=\"synIdentifier\">{<\/span>\n\n    \n    <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">imageUpload<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synStatement\">await<\/span> resetImages(\n            APPEARANCE_IMAGE_URL, \n            APPEARANCE_IMAGE_LIMIT, \n            APPEARANCE_IMAGE_DELETE_KEY, \n            APPEARANCE_IMAGE_DELETE_VAL\n        )\n        <span class=\"synStatement\">await<\/span> <span class=\"synType\">this<\/span>.setAppearanceImages(images)\n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">setAppearanceImages<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n        \n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n[RoomImage.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\">\n<span class=\"synStatement\">class<\/span> RoomImage <span class=\"synIdentifier\">{<\/span>\n    \n    <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">imageUpload<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n\n        <span class=\"synStatement\">await<\/span> resetImages(\n            ROOM_IMAGE_URL, \n            ROOM_IMAGE_LIMIT, \n            ROOM_IMAGE_DELETE_KEY, \n            ROOM_IMAGE_DELETE_VAL\n        )\n        <span class=\"synStatement\">await<\/span> <span class=\"synType\">this<\/span>.setRoomImages(images)\n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">setRoomImages<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n        \n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u30af\u30e9\u30b9\u3068\u3057\u3066\u5206\u304b\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3067\u3044\u3048\u3070\u554f\u984c\u306a\u3044\u3068\u8a00\u3048\u3070\u554f\u984c\u306a\u3044\u304b\u306a\u3063\u3066\u601d\u3046\u3093\u3067\u3059\u304c\u3001<\/p>\n<p>\u4f8b\u3048\u3070\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30e9\u30c3\u30d7\u3057\u3066\u3057\u307e\u3048\u3070\u5916\u89b3\u753b\u50cf\u306e\u524a\u9664\u306e\u547c\u3073\u51fa\u3057\u3092\u30e1\u30c3\u30bb\u30fc\u30b8\u7d50\u5408\u306e\u69d8\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u3046\u3059\u308c\u3070\u4e00\u76ee\u3067\u5efa\u7269\u3068\u90e8\u5c4b\u306e\u753b\u50cf\u3092reset\u3057\u3066\u3044\u308b\u3063\u3066\u4e8b\u304c\u5206\u304b\u308a\u3084\u3059\u3044\u304b\u306a\u3063\u3066\u601d\u3044\u307e\u3059\u3002<\/p>\n[appearanceImage.ts]\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">default<\/span> <span class=\"synStatement\">class<\/span> AppearanceImage <span class=\"synIdentifier\">{<\/span>\n    \n    <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">imageUpload<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n            \n        <span class=\"synStatement\">await<\/span> <span class=\"synType\">this<\/span>.resetAppearanceImages()\n        <span class=\"synStatement\">await<\/span> <span class=\"synType\">this<\/span>.setAppearanceImages(images)\n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">resetAppearanceImages<\/span>() <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synStatement\">await<\/span> resetImages(\n            APPEARANCE_IMAGE_URL, \n            APPEARANCE_IMAGE_LIMIT, \n            APPEARANCE_IMAGE_DELETE_KEY, \n            APPEARANCE_IMAGE_DELETE_VAL\n        )\n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">setAppearanceImages<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n        \n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u4eee\u306burl\u306b\u52d5\u7684\u306b\u5909\u308f\u308b\u8981\u7d20(userId\u3001userToken\u3001upload\u3055\u308c\u3066\u3044\u308b\u753b\u50cf\u304c\u7d10\u3065\u3044\u3066\u3044\u308b\u7269\u4ef6Id\u306a\u3069)\u304c\u3042\u308a\u3001\u30c7\u30fc\u30bf\u7d50\u5408\u3067\u3057\u304b\u547c\u3073\u51fa\u305b\u306a\u304b\u3063\u305f\u3068\u3057\u3066\u3082\u62bd\u8c61\u5316\u3057\u305f\u5171\u901a\u51e6\u7406\u306f\u30e9\u30c3\u30d7\u3057\u3066\u3001\u5f15\u6570\u306f\u56fa\u5b9a\u51fa\u6765\u308b\u3068\u3053\u308d\u306f\u56fa\u5b9a\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u683c\u6bb5\u306b\u53ef\u8aad\u6027\u306f\u4e0a\u304c\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"code lang-tsx\" data-lang=\"tsx\" data-unlink=\"\"><span class=\"synSpecial\">export<\/span> <span class=\"synStatement\">default<\/span> <span class=\"synStatement\">class<\/span> AppearanceImage <span class=\"synIdentifier\">{<\/span>\n\n    \n    <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">imageUpload<\/span>(<span class=\"synPreProc\">images<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synIdentifier\">Images<\/span>) <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synIdentifier\">const<\/span> url = <span class=\"synType\">this<\/span>.getUrl()\n        <span class=\"synStatement\">await<\/span> <span class=\"synType\">this<\/span>.resetAppearanceImages(url)\n        <span class=\"synStatement\">await<\/span> <span class=\"synType\">this<\/span>.setAppearanceImages(url, images)\n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synIdentifier\">getUrl<\/span>() <span class=\"synIdentifier\">{<\/span>\n        \n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">resetAppearanceImages<\/span>(<span class=\"synPreProc\">url<\/span>:<span class=\"synPreProc\"> <\/span><span class=\"synType\">string<\/span>) <span class=\"synIdentifier\">{<\/span>\n        <span class=\"synStatement\">await<\/span> resetImages(\n            url, \n            APPEARANCE_IMAGE_LIMIT, \n            APPEARANCE_IMAGE_DELETE_KEY, \n            APPEARANCE_IMAGE_DELETE_VAL\n        )\n    <span class=\"synIdentifier\">}<\/span>\n\n    <span class=\"synStatement\">private<\/span> <span class=\"synStatement\">async<\/span> <span class=\"synIdentifier\">setAppearanceImages<\/span>(<span class=\"synPreProc\">url<\/span><span class=\"synStatement\">,<\/span><span class=\"synPreProc\"> images<\/span>) <span class=\"synIdentifier\">{<\/span>\n        \n    <span class=\"synIdentifier\">}<\/span>\n<span class=\"synIdentifier\">}<\/span>\n<\/pre>\n<p>\u4e0a\u8a18\u4f8b\u3060\u3068\u3001\u5efa\u7269\u3068\u90e8\u5c4b\u306e\u4f8b\u306a\u306e\u30672\u901a\u308a\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u3001\u5c11\u3057\u5206\u304b\u308a\u3065\u3089\u3044\u304b\u3082\u3067\u3059\u304c\u3001<\/p>\n<p>\u30c7\u30fc\u30bf\u7d50\u5408\u3068\u306f\u3044\u3048\u3001\u5f15\u6570\u306f\u5c11\u306a\u3051\u308c\u3070\u5c11\u306a\u3044\u307b\u3069\u3001\u8a8d\u77e5\u8ca0\u8377\u304c\u4e0b\u304c\u308b\u304b\u306a\u3063\u3066\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u540c\u3058\u69d8\u306a<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%C7%A1%BC%A5%BF%B7%C1%BC%B0\">\u30c7\u30fc\u30bf\u5f62\u5f0f<\/a>\u3092<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/value\">value<\/a>\u3092\u5909\u3048\u3066\u9001\u308b\u30d1\u30bf\u30fc\u30f3\u304c\u591a\u3044\u62bd\u8c61\u5ea6\u304c\u9ad8\u3044\u30e1\u30bd\u30c3\u30c9\u3067\u3042\u308c\u3070\u3042\u308b\u307b\u3069\u3001\u4e0a\u8a18\u306e\u3088\u3046\u306a\u5f15\u6570\u56fa\u5b9a\u3067\u30e9\u30c3\u30d7\u3059\u308b\u65b9\u6cd5\u306f\u53ef\u8aad\u6027\u3092\u4e0a\u3052\u3066\u304f\u308c\u308b\u304b\u306a\u3063\u3066\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"\u307e\u3068\u3081\">\u307e\u3068\u3081<\/h2>\n<p>\u524d\u56de\u304b\u3089\u3042\u308f\u305b\u3066\u3001\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u524d\u56de\u540c\u69d8\u3001\u30b3\u30fc\u30c9\u4f8b\u3092\u65b0\u3057\u304f\u8003\u3048\u308b\u306e\u306b\u82e6\u6226\u3057\u305f\u611f\u3058\u306f\u3042\u308a\u307e\u3059\u304c\u3001<\/p>\n<p>\u4f1d\u308f\u3063\u3066\u304f\u308c\u308c\u3070\u5b09\u3057\u3044\u3067\u3059\u3002<\/p>\n<p>\u9ad8\u51dd\u96c6\u30fb<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%C1%C2%B7%EB%B9%E7\">\u758e\u7d50\u5408<\/a>\u306e\u30b3\u30fc\u30c9\u3092\u610f\u8b58\u3057\u3066\u66f8\u3051\u308c\u3070\u3001\u30c6\u30b9\u30c8\u3082\u66f8\u304d\u3084\u3059\u3044\u3057\u3001\u5f8c\u304b\u3089<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A2%A5%B5%A5%A4\">\u30a2\u30b5\u30a4<\/a>\u30f3\u3057\u305f\u4eba\u306b\u3082\u8aad\u307f\u3084\u3059\u3044\u306e\u3067\u4fdd\u5b88\u6027\u304c\u4e0a\u304c\u308a\u305d\u3046\u3067\u3059\u3002<\/p>\n<p>\u6700\u8fd1\u4e00\u90e8\u306e\u66f8\u7c4d\u3067\u306f\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u3068\u3044\u3046\u306e\u3067\u306f\u306a\u304f\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%AB%A5%D7%A5%BB%A5%EB%B2%BD\">\u30ab\u30d7\u30bb\u30eb\u5316<\/a>\u3068\u95a2\u5fc3\u306e\u5206\u96e2\u3068\u3044\u3046\u8003\u3048\u65b9\u3067\u66f8\u304b\u308c\u305f\u308a\u3001\u6539\u8a02\u3055\u308c\u305f\u308a\u3057\u3066\u3044\u308b\u3068\u805e\u3044\u305f\u306e\u3067\u3001\u305d\u3053\u306b\u3064\u3044\u3066\u3082\u8abf\u3079\u3066\u5f15\u304d\u7d9a\u304d\u30b3\u30fc\u30c9\u306e\u30af\u30aa\u30ea\u30c6\u30a3\u3092\u4e0a\u3052\u308b\u4e8b\u306b\u52aa\u3081\u3089\u308c\u308c\u3070\u306a\u3063\u3066\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u3044\u305a\u308c\u306b\u3057\u3066\u3082\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u306f\u53e4\u304f\u304b\u3089\u3042\u308b\u8003\u3048\u65b9\u307f\u305f\u3044\u306a\u306e\u3067\u77e5\u3063\u3066\u3044\u3066\u640d\u306f\u306a\u3044\u3068\u601d\u3046\u306e\u3067\u3001\u3082\u3057\u826f\u304b\u3063\u305f\u3089\u3053\u306e\u30d6\u30ed\u30b0\u3082\u53c2\u8003\u306b\u3057\u3066\u9802\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u3093\u3067\u8208\u5473\u3092\u6301\u3063\u3066\u4e0b\u3055\u3063\u305f\u65b9\u304c\u3044\u3089\u3063\u3057\u3083\u308c\u3070\u30ab\u30b8\u30e5\u30a2\u30eb\u306b\u304a\u8a71\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u305f\u304f\u3001\u662f\u975e\u3054\u5fdc\u52df\u3092\u304a\u9858\u3044\u3057\u307e\u3059\uff01<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/recruit.iimon.co.jp\/?source=tb\">iimon\u63a1\u7528\u30b5\u30a4\u30c8<\/a>\u00a0\/\u00a0<a target=\"_blank\" href=\"https:\/\/www.wantedly.com\/companies\/company_2248610\">Wantedly<\/a>\u00a0\/\u00a0<a target=\"_blank\" href=\"https:\/\/www.green-japan.com\/company\/8397?job_offer_id=193363\">Green<\/a><\/p>\n<p>\u53c2\u8003\u8a18\u4e8b<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/note.com\/cyberz_cto\/n\/n26f535d6c575\">https:\/\/note.com\/cyberz_cto\/n\/n26f535d6c575<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=-yPPfe13bb0\">https:\/\/www.youtube.com\/watch?v=-yPPfe13bb0<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/zenn.dev\/miya_tech\/articles\/0dde1228045af6\">https:\/\/zenn.dev\/miya_tech\/articles\/0dde1228045af6<\/a><\/p>\n<p>\u30fbRobert C.Martin (2018), Clean Architecture \u9054\u4eba\u306b\u5b66\u3076\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u69cb\u9020\u3068\u8a2d\u8a08,\u00a0<a target=\"_blank\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/KADOKAWA\">KADOKAWA<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/speakerdeck.com\/sonatard\/coheision-coupling\">https:\/\/speakerdeck.com\/sonatard\/coheision-coupling<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/t-wada.hatenablog.jp\/entry\/ward-explains-debt-metaphor\">https:\/\/t-wada.hatenablog.jp\/entry\/ward-explains-debt-metaphor<\/a><\/p>\n<p>\u30fbThe Clean Architecture,\u00a0<a target=\"_blank\" href=\"https:\/\/blog.cleancoder.com\/uncle-bob\/2012\/08\/13\/the-clean-architecture.html\">https:\/\/blog.cleancoder.com\/uncle-bob\/2012\/08\/13\/the-clean-architecture.html<\/a><\/p>\n<p>\u30fb\u4e16\u754c\u4e00\u308f\u304b\u308a\u3084\u3059\u3044Clean Architecture,\u00a0<a target=\"_blank\" href=\"https:\/\/www.slideshare.net\/AtsushiNakamura4\/clean-architecture-release\">https:\/\/www.slideshare.net\/AtsushiNakamura4\/clean-architecture-release<\/a><\/p>\n<p>\u30fbCode\u00a0readability,\u00a0<a target=\"_blank\" href=\"https:\/\/speakerdeck.com\/munetoshi\/code-readability\">https:\/\/speakerdeck.com\/munetoshi\/code-readability<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/qiita.com\/issykatsu\/items\/2383b3feead6c4e95ccc\">https:\/\/qiita.com\/issykatsu\/items\/2383b3feead6c4e95ccc<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/qiita.com\/makotoyc\/items\/aee473b341cd3a7bd31f\">https:\/\/qiita.com\/makotoyc\/items\/aee473b341cd3a7bd31f<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/ja\/docs\/Web\/API\/GeolocationPosition\/coords\">https:\/\/developer.mozilla.org\/ja\/docs\/Web\/API\/GeolocationPosition\/coords<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/thoughtbot.com\/blog\/types-of-coupling?utm_source=chatgpt.com\">https:\/\/thoughtbot.com\/blog\/types-of-coupling?utm_source=chatgpt.com<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/e-words.jp\/w\/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E7%B5%90%E5%90%88%E5%BA%A6.html\">https:\/\/e-words.jp\/w\/\u30e2\u30b8\u30e5\u30fc\u30eb\u7d50\u5408\u5ea6.html<\/a><\/p>\n<p><a target=\"_blank\" href=\"https:\/\/speakerdeck.com\/minodriven\/ai-good-code-bad-code?slide=7\">https:\/\/speakerdeck.com\/minodriven\/ai-good-code-bad-code?slide=7<\/a><\/p>\n<\/div>\n<p><script>(function(d, s, id) {\n  var js, fjs = d.getElementsByTagName(s)[0];\n  if (d.getElementById(id)) return;\n  js = d.createElement(s); js.id = id;\n  js.src = \"\/\/connect.facebook.net\/ja_JP\/sdk.js#xfbml=1&appId=719729204785177&version=v17.0\";\n  fjs.parentNode.insertBefore(js, fjs);\n}(document, 'script', 'facebook-jssdk'));<\/script><br \/>\n<br \/>\n<br \/><a href=\"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u3053\u3093\u306b\u3061\u306f\u3002iimon\u3067\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u3057\u3066\u3044\u308bhayashi\u3068\u7533\u3057\u307e\u3059\u3002 \u666e\u6bb5\u306f\u4e3b\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u958b\u767a\u3057\u3066\u304a\u308a\u307e\u3059\u3002 \u300c\u7dba\u9e97\u306a\u30b3\u30fc\u30c9\u3068\u306f\u4f55\u304b\u300d\u3068\u3044\u3046\u3053\u3068\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u3044\u3066\u3001\u524d\u56de\u306f\u51dd\u96c6\u5ea6\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\u306e\u3067\u3001 https:\/\/t [&hellip;]","protected":false},"author":1,"featured_media":10443,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) - iimon TECH BLOG - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) - iimon TECH BLOG - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u3053\u3093\u306b\u3061\u306f\u3002iimon\u3067\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u3057\u3066\u3044\u308bhayashi\u3068\u7533\u3057\u307e\u3059\u3002 \u666e\u6bb5\u306f\u4e3b\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u958b\u767a\u3057\u3066\u304a\u308a\u307e\u3059\u3002 \u300c\u7dba\u9e97\u306a\u30b3\u30fc\u30c9\u3068\u306f\u4f55\u304b\u300d\u3068\u3044\u3046\u3053\u3068\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u3044\u3066\u3001\u524d\u56de\u306f\u51dd\u96c6\u5ea6\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\u306e\u3067\u3001 https:\/\/t [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-21T19:15:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1300\" \/>\n\t<meta property=\"og:image:height\" content=\"687\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/10442\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) &#8211; iimon TECH BLOG\",\"datePublished\":\"2025-10-21T19:15:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/10442\\\/\"},\"wordCount\":299,\"image\":{\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/10442\\\/\",\"url\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000\",\"name\":\"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) - iimon TECH BLOG - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png\",\"datePublished\":\"2025-10-21T19:15:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png\",\"width\":1300,\"height\":687},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tech.iimon.co.jp\\\/entry\\\/2025\\\/10\\\/21\\\/160000#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) &#8211; iimon TECH BLOG\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) - iimon TECH BLOG - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000","og_locale":"ja_JP","og_type":"article","og_title":"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) - iimon TECH BLOG - \u30dd\u30b1\u30b3\u30f3","og_description":"\u3053\u3093\u306b\u3061\u306f\u3002iimon\u3067\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u3057\u3066\u3044\u308bhayashi\u3068\u7533\u3057\u307e\u3059\u3002 \u666e\u6bb5\u306f\u4e3b\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u958b\u767a\u3057\u3066\u304a\u308a\u307e\u3059\u3002 \u300c\u7dba\u9e97\u306a\u30b3\u30fc\u30c9\u3068\u306f\u4f55\u304b\u300d\u3068\u3044\u3046\u3053\u3068\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u3044\u3066\u3001\u524d\u56de\u306f\u51dd\u96c6\u5ea6\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u305f\u306e\u3067\u3001 https:\/\/t [&hellip;]","og_url":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-10-21T19:15:42+00:00","og_image":[{"width":1300,"height":687,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"9\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/10442\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) &#8211; iimon TECH BLOG","datePublished":"2025-10-21T19:15:42+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/10442\/"},"wordCount":299,"image":{"@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/10442\/","url":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000","name":"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) - iimon TECH BLOG - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#primaryimage"},"image":{"@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png","datePublished":"2025-10-21T19:15:42+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fh2Fhayakatsu01202F202510202F2025102011.png","width":1300,"height":687},{"@type":"BreadcrumbList","@id":"https:\/\/tech.iimon.co.jp\/entry\/2025\/10\/21\/160000#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"\u51dd\u96c6\u5ea6\u3068\u7d50\u5408\u5ea6\u306b\u3064\u3044\u3066\u8abf\u3079\u3066\u307f\u305f(part2 \u7d50\u5408\u5ea6\u7de8) &#8211; iimon TECH BLOG"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/10442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=10442"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/10442\/revisions"}],"predecessor-version":[{"id":10444,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/10442\/revisions\/10444"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/10443"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=10442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=10442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=10442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}