PageSourceSearch

https://shinagawa.app/_next/static/chunks/pages/posts-79c0daabcbd0b494.js

js shinagawa.app collected 2026-10-02 01:15:06 UTC 21,147 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2679],{8610:function(t,e,o){(window.__NEXT_P=window.__NEXT_P||[]).push(["/posts",function(){return o(7001)}])},8177:function(t,e,o){"use strict";var a=o(5893),i=o(1857),n=o.n(i);let r=new Date().getFullYear();e.Z={footer:(0,a.jsxs)("small",{style:{display:"block",marginTop:"8rem"},className:"jsx-7c359fde634f3543",children:[(0,a.jsx)("time",{className:"jsx-7c359fde634f3543",children:r})," \xa9 品川アプリ.",(0,a.jsx)("a",{href:"/feed.xml",className:"jsx-7c359fde634f3543",children:"RSS"}),(0,a.jsx)(n(),{id:"7c359fde634f3543",children:"a.jsx-7c359fde634f3543{float:right}@media screen and (max-width:480px){article.jsx-7c359fde634f3543{padding-top:2rem;padding-bottom:4rem}}"})]}),head:t=>{let{title:e,meta:o}=t;return(0,a.jsxs)(a.Fragment,{children:[o.description&&(0,a.jsx)("meta",{name:"description",content:o.description}),o.tag&&(0,a.jsx)("meta",{name:"keywords",content:o.tag}),o.author&&(0,a.jsx)("meta",{name:"author",content:o.author})]})},readMore:"Read More →",darkMode:!0}},7001:function(t,e,o){"use strict";o.r(e),o.d(e,{__toc:function(){return s}});var a=o(5893),i=o(2673),n=o(8473),r=o(8177);o(7707);var d=o(2643);let s=[];function p(t){let e=Object.assign({h1:"h1"},(0,d.a)(),t.components);return(0,a.jsx)(e.h1,{children:"Blog"})}let l={MDXContent:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:e}=Object.assign({},(0,d.a)(),t.components);return e?(0,a.jsx)(e,{...t,children:(0,a.jsx)(p,{...t})}):p(t)},pageOpts:{filePath:"pages/posts/index.mdx",route:"/posts",frontMatter:{type:"posts",title:"Blog",date:"2021-03-18T00:00:00.000Z"},timestamp:1672551575e3,pageMap:[{kind:"MdxPage",name:"about",route:"/about",frontMatter:{type:"page",title:"About",date:"2022-07-24T00:00:00.000Z"}},{kind:"Folder",name:"eigovision",route:"/eigovision",children:[{kind:"MdxPage",name:"core-nlp-en",route:"/eigovision/core-nlp-en",frontMatter:{type:"tag",date:"2024-12-04T00:00:00.000Z"}},{kind:"MdxPage",name:"core-nlp-ja",route:"/eigovision/core-nlp-ja",frontMatter:{type:"tag",date:"2024-12-04T00:00:00.000Z"}},{kind:"MdxPage",name:"privacy-policy",route:"/eigovision/privacy-policy",frontMatter:{type:"tag",date:"2025-02-15T00:00:00.000Z"}},{kind:"MdxPage",name:"support",route:"/eigovision/support",frontMatter:{type:"tag",date:"2025-02-15T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/eigovision/terms-and-conditions",frontMatter:{type:"tag",date:"2025-02-15T00:00:00.000Z"}},{kind:"Meta",data:{"privacy-policy":"Privacy Policy",support:"Support","terms-and-conditions":"Terms and Conditions","core-nlp-en":"Core Nlp En","core-nlp-ja":"Core Nlp Ja"}}]},{kind:"Folder",name:"english_reading",route:"/english_reading",children:[{kind:"MdxPage",name:"privacy-policy",route:"/english_reading/privacy-policy",frontMatter:{type:"tag",date:"2023-01-15T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/english_reading/terms-and-conditions",frontMatter:{type:"tag",date:"2023-01-15T00:00:00.000Z"}},{kind:"Meta",data:{"privacy-policy":"Privacy Policy","terms-and-conditions":"Terms and Conditions"}}]},{kind:"Folder",name:"etymology",route:"/etymology",children:[{kind:"MdxPage",name:"privacy-policy",route:"/etymology/privacy-policy",frontMatter:{type:"tag",date:"2023-01-15T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/etymology/terms-and-conditions",frontMatter:{type:"tag",date:"2023-01-15T00:00:00.000Z"}},{kind:"Meta",data:{"privacy-policy":"Privacy Policy","terms-and-conditions":"Terms and Conditions"}}]},{kind:"MdxPage",name:"index",route:"/",frontMatter:{type:"page",title:"Ap
1ps",date:"2022-07-24T00:00:00.000Z"}},{kind:"Folder",name:"listen-to-novels",route:"/listen-to-novels",children:[{kind:"MdxPage",name:"display-mode-en",route:"/listen-to-novels/display-mode-en",frontMatter:{type:"tag",date:"2025-08-21T00:00:00.000Z"}},{kind:"MdxPage",name:"display-mode-ja",route:"/listen-to-novels/display-mode-ja",frontMatter:{type:"tag",date:"2025-08-21T00:00:00.000Z"}},{kind:"MdxPage",name:"faq-en",route:"/listen-to-novels/faq-en",frontMatter:{type:"tag",date:"2023-05-08T00:00:00.000Z"}},{kind:"MdxPage",name:"how-to-use-en",route:"/listen-to-novels/how-to-use-en",frontMatter:{type:"tag",date:"2023-12-17T00:00:00.000Z"}},{kind:"MdxPage",name:"how-to-use-ja",route:"/listen-to-novels/how-to-use-ja",frontMatter:{type:"tag",date:"2023-12-17T00:00:00.000Z"}},{kind:"MdxPage",name:"privacy-policy",route:"/listen-to-novels/privacy-policy",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"MdxPage",name:"regex-ja",route:"/listen-to-novels/regex-ja",frontMatter:{type:"tag",date:"2023-10-20T00:00:00.000Z"}},{kind:"MdxPage",name:"support",route:"/listen-to-novels/support",frontMatter:{type:"tag",date:"2025-02-11T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/listen-to-novels/terms-and-conditions",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"Meta",data:{"display-mode-en":"Display Mode En","display-mode-ja":"Display Mode Ja",support:"Support","privacy-policy":"Privacy Policy","terms-and-conditions":"Terms and Conditions","how-to-use-en":"How to Use En","how-to-use-ja":"How to Use Ja","regex-ja":"Regex Ja","faq-en":"Faq En"}}]}
1,{kind:"Folder",name:"mangavision",route:"/mangavision",children:[{kind:"MdxPage",name:"privacy-policy",route:"/mangavision/privacy-policy",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"MdxPage",name:"support",route:"/mangavision/support",frontMatter:{type:"tag",date:"2025-02-20T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/mangavision/terms-and-conditions",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"Meta",data:{support:"Support","privacy-policy":"Privacy Policy","terms-and-conditions":"Terms and Conditions"}}]},{kind:"Folder",name:"posts",route:"/posts",children:[{kind:"MdxPage",name:"admob_adaptive_banner",route:"/posts/admob_adaptive_banner",frontMatter:{title:"AdMobのアダプティブバナーをJetpack ComposeとSwiftUIで使用する",date:"2023/1/12",description:"ライブラリには Jetpack Compose や SwiftUI 用のアダプティブバナーは用意されていないので、使用するには一工夫必要になります。",tag:"JetpackCompose, SwiftUI, AdMob, アダプティブバナー",author:"kyamada"}},{kind:"MdxPage",name:"admob_native_ad_android",route:"/posts/admob_native_ad_android",frontMatter:{title:"AdMobのネイティブ広告をJetpack Composeで表示し、プリロード対応する",date:"2023/2/18",description:"Google Mobile Ads SDK は Jetpack Compose に対応していないので、広告のレイアウトは従来の xml で組む必要があります。また、広告表示のタイムラグをなくすためには、広告を事前に取得(プリロード)するのが有効です。",tag:"JetpackCompose, AdMob, ネイティブ広告",author:"kyamada"}},{kind:"MdxPage",name:"android_edge_to_edge",route:"/posts/android_edge_to_edge",frontMatter:{title:"Android 15 の edge-to-edgeに対応する",date:"2025/1/18",description:"Android 15 の edge-to-edge に対応した時の変更点を記載します",tag:"Android, edge-to-edge",author:"kyamada"}},{kind:"MdxPage",name:"android_share_activity",route:"/posts/android_share_activity",frontMatter:{title:"ブラウザの共有からAndroidアプリを開く",date:"2024/10/15",description:"ブラウザの共有からAndroidアプリを開く方法を説明します。",tag:"Android",author:"kyamada"}},{kind:"MdxPage",name:"compose_multiplatform_admob_banner",route:"/posts/compose_multiplatform_admob_banner",frontMatter:{title:"Compose Multiplatform で Admobのバナー広告を表示する",date:"2024/6/3",description:"Compose Multiplatform で、Android/iOSの環境で Admob のバナー広告を表示する方法を解説します。",tag:"Kotlin, ComposeMultiplatform, Admob",author:"kyamada"}},{kind:"MdxPage",name:"compose_multiplatform_keyboard",route:"/posts/compose_multiplatform_keyboard",frontMatter:{title:"Compose Multiplatform で キーボードショートカットを実装する",date:"2024/8/16",description:"Compose Multiplatform で、キーボードショートカット処理を実装する方法を解説します。",tag:"Kotlin, ComposeMultiplatform",author:"kyamada"}},{kind:"MdxPage",name:"compose_multiplatform_subscription",route:"/posts/compose_multiplatform_subscription",frontMatter:{title:"Compose Multiplatform で サブスクリプションを実装する",date:"2025/1/24",description:"Android/iOSの両方でサブスクリプションの課金処理を実装する方法をまとめました。",tag:"Kotlin, ComposeMultiplatform, subscription",author:"kyamada"}},{kind:"MdxPage",name:"create_android_aab_by_command_line",route:"/posts/create_android_aab_by_command_line",frontMatter:{title:"Androidのリリース用App Bundle(.aab)をコマンドラインから生成する",date:"2023/1/13",description:"Android アプリのリリース時に Ap
1pBundle(.aab)を作成する必要があります。GUI から行うと面倒なので、コマンドラインから AppBundle を作成する方法をまとめました。",tag:"Android, aab, App Bundle",author:"kyamada"}},{kind:"MdxPage",name:"flutter_exists_image",route:"/posts/flutter_exists_image",frontMatter:{title:"Flutterで画像が存在するかどうかを画像をロードせずに調べる方法",date:"2022/9/14",description:"画像の存在チェックをするコードを自動生成するスクリプトを作成します",tag:"flutter, existsImageFile",author:"kyamada"}},{kind:"MdxPage",name:"flutter_font",route:"/posts/flutter_font",frontMatter:{title:"Flutterでカスタムフォントを導入して発音記号を表示する",date:"2022/9/11",description:"Flutterのデフォルトのフォント(Roboto)で発音記号を表示しようとしたら文字化けしたのですが、カスタムフォントを導入することで解決できたので、その方法を紹介します。",tag:"flutter, font, M+FONTS",author:"kyamada"}},{kind:"MdxPage",name:"flutter_ios_install_error",route:"/posts/flutter_ios_install_error",frontMatter:{title:"FlutterでビルドしたipaファイルがTestFlightでインストールできない問題の解決法",date:"2022/9/21",description:"bundle identifierの末尾に .add を追加すると解決します。",tag:"flutter, iOS",author:"kyamada"}},{kind:"MdxPage",name:"get_csr_html_multiplatform",route:"/posts/get_csr_html_multiplatform",frontMatter:{title:"CSRのHTMLをAndroidとiOSで取得する方法",date:"2023/1/2",description:"CSR(クライアントサイドレンダリング)で生成されるHTMLを取得する方法です",tag:"Android, iOS, html, CSR, javascript",author:"kyamada"}},{kind:"MdxPage",name:"index",route:"/posts",frontMatter:{type:"posts",title:"Blog",date:"2021-03-18T00:00:00.000Z"}},{kind:"MdxPage",name:"ios_background_process",route:"/posts/ios_background_process",frontMatter:{title:"iOSアプリがバックグラウンド状態の時に処理を継続する方法",date:"2022/10/9",description:"iOSアプリでバックグラウンド中に処理を継続する方法を調べ、実現可能だった方法と不可だった方法に分類しました。",tag:"ios, background, ble",author:"kyamada"}},{kind:"MdxPage",name:"ios_share_extension",route:"/posts/ios_share_extension",frontMatter:{title:"iOS の Share Extensionで Safari からアプリを開く",date:"2023/2/9",description:"iOS アプリに Share Extension を導入し、Safari からアプリを開く方法を説明します。",tag:"iOS, Share Extension, Safari",author:"kyamada"}},{kind:"MdxPage",name:"jetpack_compose_shared_storage_document",route:"/posts/jetpack_compose_shared_storage_document",frontMatter:{title:"JetpackCompose から 共有ストレージのファイルにアクセスする",date:"2023/8/18",description:"1. ユーザにフォルダーを選択させ、そこにファイルを作成する。2. ユーザにファイルを選択させ、その内容を読み取る",tag:"JetpackCompose,CreateDocument,OpenDocument",author:"kyamada"}},{kind:"MdxPage",name:"kotlin_multiplatform_recommended_libs",route:"/posts/kotlin_multiplatform_recommended_libs",frontMatter:{title:"Kotlin Multiplatform (KMP) の使い方やお勧めのライブラリの紹介",date:"2024/5/25",description:null,tag:"Kotlin, Compose",author:"kyamada"}},{kind:"MdxPage",name:"kotlin_native_string_replace_bug",route:"/posts/kotlin_native_string_replace_bug",frontMatter:{title:"Kotlin/Nativeの String.replace のバグを回避する",date:"2023/2/14",description:"Kotlin/Nativeの String.replace を使うとiOSでバグが発生します。それを回避する方法を説明します",tag:"KotlinNative",author:"kyamada"}},{kind:"MdxPage",name:"ktor_okio_download_file",route:"/posts/ktor_okio_download_file",frontMatter:{title:"ktor と okio を使って大きなファイルをダウンロードする",date:"2024/5/10",description:"大きなファイルをダウンロードする場合、ファイルの内容をすべてメモリに展開してしまうと、OutOfMemoryError が発生してしまいます。",tag:"Multiplatform,ktor,okio",author:"kyamada"}},{kind:"MdxPage",name:"moomoo_acm_dns",route:"/posts/moomoo_acm_dns",frontMatter:{title:"ムームードメインでAWS Certificate Manager(ACM)のSSL証明書を取得する",date:"2022/7/24",description:"ムームードメインでドメインを取得し、AWS Certificate Manager(ACM)のSSL 証明書を取得する方法を説明します。",tag:"acm, moomoo, dns",author:"kyamada"}},{kind:"MdxPage",name:"nextjs_portfolio",route:"/posts/nextjs_portfolio",frontMatter:{title:"next.jsでポートフォリオサイトを作ってS3にデプロイする",date:"2022/7/25",description:"nextjs-portfolio-starterをベースにポートフォリオサイトを作成し、S3にデプロイする方法を説明します。",tag:"next.js, s3",author:"kyamada"}},{kind:"MdxPage",name:"nextjs_s3_cloudfront_dynamic_routes",route:"/posts/nextjs_s3_cloudfront_dynamic_routes",frontMatter:{title:"next.jsをS3+CloudFrontにデプロイした時に、Dynamic Routesを処理する方法",date:"2022/9/19",description:"pages/404.tsxの作成し、CloudFrontでカスタムエラーレスポンスを作成します",tag:"next.js, s3, cloudfront",author:"kyamada"}},{kind:"MdxPage",name:"react_scroll_position_from_bottom",route:"/posts/react_scroll_position_from_bottom",frontMatter:{title:"Reactでスクロール可能な要素の下からのスクロールポジションを取得する",date:"2022/6/21",description:"Reactでスクロール可能な要素の下からのスクロールポジションを取得する方法です",tag:"react, next.js",author:"kyamada"}},{kind:"MdxPage",name:"reducing_mac_system_data_storage",route:"/posts/reducing_mac_system_data_storage",frontMatter:{title:"Macのシステムデータの容量を削減する",date:"2026/3/6",description:"Macのシステムデータの容量が600GBを超えていたので、原因を調べて容量を削減しました。",tag:"Mac, Storage",author:"kyamada"}},{kind:"MdxPage",name:"swiftui_document_picker",route:"/posts/swiftui_document_picker",frontMatter:{title:"Swift
1UI から UIDocumentPickerViewController を呼び出す",date:"2023/8/18",description:"1. ユーザにフォルダーを選択させ、そこにファイルを作成する。2. ユーザにファイルを選択させ、その内容を読み取る",tag:"SwiftUI, UIDocumentPickerViewController",author:"kyamada"}},{kind:"MdxPage",name:"swiftui_textfield_in_sheet",route:"/posts/swiftui_textfield_in_sheet",frontMatter:{title:"SwiftUIのTextFieldに入力した1文字目が変換対象にならない問題とその対処法",date:"2023/3/13",description:"TextField に日本語入力キーボードで文字を入力すると、1 文字目が変換対象にならないことがあります。例えば、キーボードで「a」「u」と入力すると、1文字目の「あ」が変換対象になりません。",tag:"SwiftUI, TextField, UITextField",author:"kyamada"}},{kind:"MdxPage",name:"ump_sdk_reject",route:"/posts/ump_sdk_reject",frontMatter:{title:"Googleの User Messaging Platform (UMP) SDK でGDPRに対応したら、AppStoreの審査でリジェクトされた",date:"2023/12/22",description:"ようするに、ATTメッセージを表示する前に、同意を促すようなメッセージ(ここではGDPRメッセージ)を表示してはいけないようです。",tag:"UMP, GDPR, ATT",author:"kyamada"}},{kind:"MdxPage",name:"webview_http",route:"/posts/webview_http",frontMatter:{title:"AndroidとiOSのWebViewでhttp通信を許可する",date:"2024/11/14",description:"全てのドメインに対してHTTPのクリアテキスト通信を許可したい場合は...",tag:"Android, iOS, WebView",author:"kyamada"}},{kind:"Meta",data:{reducing_mac_system_data_storage:"Macのシステムデータの容量を削減する",compose_multiplatform_subscription:"Compose Multiplatform で サブスクリプションを実装する",android_edge_to_edge:"Android 15 の edge-to-edgeに対応する",webview_http:"AndroidとiOSのWebViewでhttp通信を許可する",android_share_activity:"ブラウザの共有からAndroidアプリを開く",compose_multiplatform_keyboard:"Compose Multiplatform で キーボードショートカットを実装する",compose_multiplatform_admob_banner:"Compose Multiplatform で Admobのバナー広告を表示する",kotlin_multiplatform_recommended_libs:"Kotlin Multiplatform (KMP) の使い方やお勧めのライブラリの紹介",ktor_okio_download_file:"ktor と okio を使って大きなファイルをダウンロードする",ump_sdk_reject:"Googleの User Messaging Platform (UMP) SDK でGDPRに対応したら、AppStoreの審査でリジェクトされた",jetpack_compose_shared_storage_document:"JetpackCompose から 共有ストレージのファイルにアクセスする",swiftui_document_picker:"SwiftUI から UIDocumentPickerViewController を呼び出す",swiftui_textfield_in_sheet:"SwiftUIのTextFieldに入力した1文字目が変換対象にならない問題とその対処法",admob_native_ad_android:"AdMobのネイティブ広告をJetpack Composeで表示し、プリロード対応する",kotlin_native_string_replace_bug:"Kotlin/Nativeの String.replace のバグを回避する",ios_share_extension:"iOS の Share Extensionで Safari からアプリを開く",create_android_aab_by_command_line:"Androidのリリース用App Bundle(.aab)をコマンドラインから生成する",admob_adaptive_banner:"AdMobのアダプティブバナーをJetpack ComposeとSwiftUIで使用する",get_csr_html_multiplatform:"CSRのHTMLをAndroidとiOSで取得する方法",ios_background_process:"iOSアプリがバックグラウンド状態の時に処理を継続する方法",flutter_ios_install_error:"FlutterでビルドしたipaファイルがTestFlightでインストールできない問題の解決法",nextjs_s3_cloudfront_dynamic_routes:"next.jsをS3+CloudFrontにデプロイした時に、Dynamic Routesを処理する方法",flutter_exists_image:"Flutterで画像が存在するかどうかを画像をロードせずに調べる方法",flutter_font:"Flutterでカスタムフォントを導入して発音記号を表示する",nextjs_portfolio:"next.jsでポートフォリオサイトを作ってS3にデプロイする",moomoo_acm_dns:"ムームードメインでAWS Certificate Manager(ACM)のSSL証明書を取得する",react_scroll_position_from_bottom:"Reactでスクロール可能な要素の下からのスクロールポジションを取得する",index:"Blog"}}]},{kind:"Folder",name:"translation-browser",route:"/translation-browser",children:[{kind:"MdxPage",name:"privacy-policy",route:"/translation-browser/privacy-policy",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/translation-browser/terms-and-conditions",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"Meta",data:{"privacy-policy":"Privacy Policy","terms-and-conditions":"Terms and Conditions"}}]},{kind:"Folder",name:"voicevox-tts",route:"/voicevox-tts",children:[{kind:"MdxPage",name:"privacy-policy",route:"/voicevox-tts/privacy-policy",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"MdxPage",name:"support",route:"/voicevox-tts/support",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}},{kind:"MdxPage",name:"terms-and-conditions",route:"/voicevox-tts/terms-and-conditions",frontMatter:{type:"tag",date:"2025-01-24T00:00:00.000Z"}}
1,{kind:"Meta",data:{"privacy-policy":"Privacy Policy",support:"Support","terms-and-conditions":"Terms and Conditions"}}]},{kind:"Meta",data:{about:"About",index:"Apps"}}],flexsearch:{codeblocks:!0},title:"Blog",headings:s},pageNextRoute:"/posts",nextraLayout:n.ZP,themeConfig:r.Z};e.default=(0,i.j)(l)}},function(t){t.O(0,[1917,9774,2888,179],function(){return t(t.s=8610)}),_N_E=t.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.