タイマー表示時に数字がガクガクする件

小数点第二位まで表示するタイプのストップウォッチを作成中、数字の表示部分がなんかガクガク左右の幅が変わってとてもみづらい!(動画をはればわかりやすいのですが、参考先のサイトにお任せします!)
そんな時は、fontFamilyでMonospaceを指定すれば数字が震えない🎵

    Text(
        text = elapsedTimeFromStart.modifyElapsedTimeToScale2String(),   // 10msごとに値が変わります
        fontFamily = FontFamily.Monospace,
    )

参考:

limesode.hatenablog.com

↑「プロポーショナルフォント」という存在を初めて知りました。。。

kdoctor --team-ids でCertificates are not found

状況

  • Compose Multiplatform (KotlinとJetpack Coposeをベースとしたマルチプラットフォームを跨いだアプリ開発ができるやつ。flutter的な。) のチュートリアルに従ってサンプルアプリを動かしてみている
  • とりあえずで初期作成したアプリをiPad(OSver=17.4.1)で起動して見たく、kdoctor --team-idsコマンドを実行した

遭遇したエラー

Certificates are not found

対処方法

  • Xcodeアプリを起動し、メニューバーからSettingを開く
  • AccountsでAppleIDのサインインが必要ですよエラーが出てないか確認、出てればログインする
  • 同じ画面の「manage certificates」ボタンをクリック
  • certificateが何もなければ、左下の+ボタンをクリックしてApple Developmenetを選択

参考サイト・メモ

  • デバッグで実機で動かすには、この開発者がアプリを作りましたよの証明書が必要なみたいです。

developer.apple.com

qiita.com

AdmobのUMPのスタートガイドのページがInternalServerErrorで見れない件

いつの状況か

2024/2/11 (このInternalServerError自体は2023年11月ごろに起きているという日本語ブログ記事をいくつかみました)

どのページのことか

GoogleのAd Manager > Mobile Ads SDK > Android のページ developers.google.com のUMPの「始める」のリンク先。

左サイドバーで言うと、UMPの「始める」

URLでいうと以下。

https://developers.google.com/ad-manager/mobile-ads-sdk/android/privacy?hl=ja

暫定対処(これで良いのかは不明)

Google検索でこのページを検索して「このページを訳す」で開くと、中身が見れた。

検索結果のタイトルの隣にある翻訳ボタンを押す
おまけに原文表示に切り替えると多分元のページがみれている気がする。

補足1

翻訳した状態でのURLはこちら。 https://developers-google-com.translate.goog/ad-manager/mobile-ads-sdk/android/privacy?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc

原文を選択しているとこれ。 https://developers-google-com.translate.goog/ad-manager/mobile-ads-sdk/android/privacy?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc

補足2

Admobコミュニティで同じ質問をされている方がいたのでそこに投稿したいけれど、その該当の質問ページが見つけられずブログにて投稿・・・。

補足3

実装に関しては以下GitHubもかなり参考にさせていただきました。

github.com

github.com

Android開発で単体テストを書いた(キーワード:Context, assets, Locale)

前置き

個人開発でAndroidアプリを作成中なのですが、それにあたって単体テストを記述する際にあれやこれやと苦労しました。
どなたかの参考になればなと思い、どのような設定やテストコードを書いたらテストが動くようになったかについて記述します。
(動くようになった!の記事である性質が強く、ViewModelの使い方・フォルダ分け・DI等いろいろ未熟なところがあるとは思いますので、適宜取捨選択して参考にしていただきたいです。。。(ご指摘や参考意見をいただけるのも嬉しいです))

以下のような条件のもとテストを書きました

  • テスト対象メソッドがContextを使う
  • ロケールで若干挙動が異なる(ファイル取得先のパスが異なる・関数の戻り値が異なる)のでロケールごとのテストを用意する
  • assetsフォルダ内に格納したCSVファイルを読み取って処理する
  • 他テストファイルでJUnit5を利用中(プロジェクト内でJUnit4,5が混在)

参考サイト

qiita.com

robolectric.org

github.com

jp-seemore.com

knowledge.moshimore.jp

あとはChatGPTにもお世話になりました。

実際のコード

build.gradle.kts (:app)

plugins {
    // 略
    id("de.mannodermaus.android-junit5") version "1.10.0.0"
}

android {
    // 略
    testOptions {
        unitTests.isIncludeAndroidResources = true   
    }
}

dependencies {
    // 略

    implementation("androidx.test:core-ktx:1.5.0")
    implementation("androidx.test.ext:junit-ktx:1.1.5")

    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")

    // For JUnit5
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.1")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.1")
    testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.1")
    testImplementation("org.junit.vintage:junit-vintage-engine:5.10.1")

    // For Mock
    testImplementation("junit:junit:4.13.2")
    testImplementation("org.robolectric:robolectric:4.11.1")

    // 他にも略
}

補足

  • unitTests.isIncludeAndroidResourcesについて
    テスト時にも/src/main/assetsフォルダの中にアクセスしたい際には必要かと思います。
    (これを記述しないと、テスト時にリソース系にアクセスしないorできないのかなと思います。/src/main/assetsフォルダにアクセスせずFileNotFoundの例外が発生しました。)
  • dependenciesについて
    精査しきれておらず恐縮なのですが、テストを書いていくにあたって最終的にこの辺りが必要になっていました。(量が多いので自分の判断で一部省略しています。過不足あったらすみません)

テスト対象のクラス・メソッド

メソッド概要

  • LocalDate型の引数に対して、その日が祝日かどうかを判定します。
  • メソッド内では、assetsフォルダ内に保存した祝日一覧(スマホの設定ロケールに応じた国のもの)のCSVファイルを参照し、引数の日付と一致するならtrueを返却するというロジックです。
  • 独自クラスも作成しているのでそれは後に続けてコードを貼ります。

コード

class CalendarViewModel : ViewModel() {

    fun isHoliday(context: Context, targetDate: LocalDate): Boolean {
        val targetCountry = Country.valueOf(Locale.current)   // Countryは独自クラスです(コードは後述)
        val targetDateString =
            targetDate.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"))

        try {
            val inputStream = context.assets.open(targetCountry.getAssetsDirectory(targetDate))
            inputStream.bufferedReader().use { reader ->
                var line = reader.readLine()

                while (line != null) {
                    val holidayDateString = line.split(",").first()
                    if (holidayDateString == targetDateString) {
                        return true
                    }
                    line = reader.readLine()
                }
            }
        } catch (e: Exception) {
            // TODO とりあえず起動を優先
            println(e)
        }

        return false
    }
}

テスト対象のメソッドで使っている独自クラス

Countryクラス

import androidx.compose.ui.text.intl.Locale
import java.time.LocalDate

enum class Country {
    JA,
    AU,
    US;

    companion object {
        fun valueOf(locale: Locale): Country {
            return when (locale.region) {
                "JP" -> JA
                "AU" -> AU
                else -> US
            }
        }
    }

    fun getAssetsDirectory(date: LocalDate): String {
        val prefix = when (this) {
            JA -> "ja"
            AU -> "au"
            else -> "us"
        }
        return "holidays/${date.year}/holidays-${prefix}.csv"
    }
}

テスト対象のメソッドの呼び出しもと

    val isHoliday = CalendarViewModel().isHoliday(LocalContext.current, LocalDate.of(2024,1,1))

補足

isHolidayメソッドの第二引数は、ここでは説明の都合上2024/1/1でべた書きにしています。

assetsフォルダ

フォルダ構造

CSVファイルの中身は以下の感じです。処理上は日付だけあれば良いのですが、管理の都合上祝日名も入れています。

2024/01/01,New Year's Day
2024/01/08,Coming of Age Day

テストコード

import android.content.Context
import androidx.test.core.app.ApplicationProvider
import org.junit.Before
import org.junit.Test
import org.junit.experimental.runners.Enclosed
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import java.time.LocalDate
import java.util.Locale

@RunWith(Enclosed::class)
class CalendarViewModelTest {

    @RunWith(RobolectricTestRunner::class)
    class IsHolidayTestForJapan {

        private lateinit var context: Context

        @Before
        fun setUp() {
            context = ApplicationProvider.getApplicationContext()
            Locale.setDefault(Locale.JAPAN)
        }

        @Test
        fun australiaDay() {
            val actual = CalendarViewModel().isHoliday(context, LocalDate.of(2025, 1, 27))
            assertFalse(actual)
        }
    }

    @RunWith(RobolectricTestRunner::class)
    class IsHolidayTestForAustralia {

        private lateinit var context: Context

        @Before
        fun setUp() {
            context = ApplicationProvider.getApplicationContext()
            Locale.setDefault(Locale("en", "AU"))
        }

        @Test
        fun australiaDay() {
            val actual = CalendarViewModel().isHoliday(context, LocalDate.of(2024, 1, 26))
            assertTrue(actual)
        }
    }
}

補足

おわり

AndroidStudioでJUnit5のテスト(ParameterizedTest)を実行する

いきなりまとめ

2024年1月現在も、AndroidStudioでJUnit5を用いてテストを実行するには3rdParty製のプラグイン導入が必要のようです。

github.com

AndroidStudioの公式サイトでも、テストを作成する際は

[Create Test] ダイアログで [JUnit4] を選択し

とあり、3rdParty製プラグインなしではJUnit5を使えなさそうなのです。
引用元↓
developer.android.com

この記事で書いていること

  • AndroidStudioでJUnit5を用いてテストを実行する方法
  • ParameterizedTestの記述例

参考サイト

JUnit5の導入方法については以下のサイトを参考にしております。

qiita.com

swet.dena.com

ParameterizedTestについては以下サイトを参考にしました。

sam09.github.io

hirabay.net

プラグイン・各記事作成の皆様に感謝です。

導入手順

前述参考サイトの1番目のQiita記事と重複しますが、プラグインのREADMEのSetup方法(下記リンク)に従えば大丈夫です。

GitHub - mannodermaus/android-junit5: Testing with JUnit 5 for Android.

自分の場合ParameterizedTestを書いたので、参考として以下まとめておこうと思います。

1. build.gradle.kts (Module:app) の先頭らへんに以下の感じで記載

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp")   // ←この辺の行は人によると思います
    id("de.mannodermaus.android-junit5") version "1.10.0.0"    // ←この行を追加です。バージョンはその時の最新のものを。
}

一応補足ですが、READMEに

declare the plugin in your app module's build script

ってあるので、モジュール用のbuild.gradleの方に記載します。

2. build.gradle.kts (Module:app) のdependenciesの中に以下の感じで記載

dependencies {

    // (略)
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")     // 必須
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")   // 必須
    testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.0")   // Parameterized Testsをやりたい場合に必須

3. Gradleファイルの再読み込み実施

build.gradleを書き換えると、AndroidStudioの上の方に Gradle files have changed うんたらのメッセージが出てくると思うので、Sync をクリックすれば大丈夫です。

ParamterizedTestの記述

1. テストのファイルを用意する

テスト対象のメソッドを右クリックし、Generate... を選択して Testを選択後、特にいじらずOKってやれば大丈夫です。
自分の場合、以下のスクリーンショットのようにJUnit5 library not found in the module ってメッセージが出ているのですが、前述の導入2で設定はしているので「Fix」は押さずにやっています。

テスト作成のウィンドウ

2. ParameterizedTestを書いてみる

ParameterizedTestというのは、「このメソッド、いろんなパターン(引数と期待値)でばーっとテストしておいて〜」という感じのテストです。パターンごとにテスト関数をせっせとコピペしつつちょっとパラメータを変えて・・という作業が不要になってとても楽です。

さて記述していきたいと思います。

なお、前提条件として以下のメソッド(月末が何曜日かの序数を返却する関数)をテストするとします。

// X年Y月の最終日の曜日の序数を返す
un getOrdinalNumberOfDayOfWeekForLastDay(
    year: Int,
    month: Int,
): Int {
    val targetYearMonth = LocalDate.of(year, month, 1)
    return LocalDate.of(year, month, targetYearMonth.lengthOfMonth()).dayOfWeek.value
}

では、1で作成されたファイルにテストを記述していきます。

import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments.arguments
import org.junit.jupiter.params.provider.MethodSource
import java.time.DayOfWeek
import java.time.LocalDate

class HogeKtTest {
    companion object {
        @JvmStatic
        fun provideGetOrdinalNumberOfDayOfWeekForLastDayParameters() = listOf(
            arguments(2024, 1, 1),
            arguments(2024, 2, 4),
            arguments(2024, 3, 7),
        )
    }

    @ParameterizedTest
    @MethodSource("provideGetOrdinalNumberOfDayOfWeekForLastDayParameters")
    fun getOrdinalNumberOfDayOfWeekForLastDayTest(year: Int, month: Int, expect: Int) {
        val actual = getOrdinalNumberOfDayOfWeekForLastDay(year, month)

        assertEquals(
            actual,
            expect,
            "${year}年${month}月の最終日は${DayOfWeek.of(actual)}(期待値=${DayOfWeek.of(expect)})"
        )
    }
}

3. 実行する

テスト対象のクラスの左側に表示されるアイコンから「Run 'xxxxTest'」をクリックすればOKです。
(自分の場合テストがメソッドのバグで失敗しているので、赤いアイコンがついています。)

実行しよう

テスト実行結果は以下のようになりました。
2024年1月31日は水曜日なので3が返却されるのが正しいのですが、テストのパラメータのうち期待値を月曜日として誤っていたことにより、テスト失敗が一件発生しています。

テスト実行結果

補足

ParameterizedTestではなく普通のテストを実行したい場合は、 package org.junit.jupiter.apiの@Test をつけてテストメソッドを書けば良いと思います。

おわり

以上です。

ランニングおすすめグッズご紹介(初心者向け)

最近ランニングを始めて、週1回は走っています。
走りたくなったらいきなり走れば良いとは思いますが、やっぱりグッズがあるとより快適に楽しくランニングできるものです。
自分が今使っていていい感じのものを以下ご紹介します。

NIKEのストラクチャー25

怪我防止のためにも(年齢がいってからの運動はすぐに体に痛みが出る・・・笑)、ちゃんとした靴は必須だと思います。
私は大きめのスポーツ用品店に行って買いました。大きめのお店だと足のサイズ測定器があって正確に靴のサイズがわかったり、ランニングに詳しいスタッフがいるので相談しながら自分に合った靴を買えます。
店員さんに靴の相談をしたい旨声をかけて、最近運動を始めたこと・ゆっくりペースで走ること・1回につき3-5km程度走ることを伝えると、このストラクチャー25をお勧めされました。足幅が広く作ってあって、踵をしっかりホールドしてくれて、とても怪我をしにくい靴のようです。
この靴を履く前は、アーチが緩んでいて足がねじれながら走っていたため、足の中指の根元の方に摩擦による魚の目ができていたのですが、この靴を履くことで魚の目ができなくなりました。

他にもいい靴は色々あるとは思いますが、自分では決めきれないのでお店の人がお勧めするものを無難に買っておけば良いかと思います。

ランニングタイツ

冬場はランニングタイツを履いてその上に短パンを履いて走っています。
特に膝のサポート等はないタイプのもの・起毛などもないシンプルなタイプを履いていますが、寒さをシャットアウトしてくれて体があったまる前も走りやすく、また体があったまった後も暑苦しくなく汗を吸っても動きづらくならないためとても重宝しています。

ウエストポーチ

お勧めできる商品は特にないのですが、スマホ・家の鍵をウエストポーチに入れておくとランニング中は手ぶらで走れてとても気持ちが良いです。
ウエストポーチ購入前はスマホを手持ちして走っていましたが、一度手ぶらを体感すると戻りたくないです。
ウエストポーチはスマホが入るか・スマホが入っても走った時にぶらぶらしないかは要チェックです。私は今持っているウエストポーチは、ウエストの紐を二重巻きにして揺れを防止しています。
これもランニングショップに行って実際に確認して買うのが無難かな・・・。

ランニングブラ

将来のたるみ防止という役割もですが、なんか姿勢が良くなる気もしてて快適なランニングのためにもおすすめです。 私はオンラインで購入して問題なかったですが、お店に行って試着して買うのが無難です・・・笑

暗い中走る上でのグッズ:ライト

自分の自由時間の都合上、暗い時間にしかランニングの時間が取れないので安全上ライトは必須です。足元をほんのり照らしてくれますし、他の人や車からの視認性も高まります。
私はこのライトをウエストポーチにくっつけて走っています。

なお、私はライトに加え、白や蛍光色など明るい色のTシャツを着て、少しでも車などからの視認性も高めるようにしています。

同じような時間帯にランニングしている人は、頭につけるタイプのライト(探検隊みたいなやつ。路面の見やすさはとても良さそう。)をつけている方や、腕にサイリウムのような光る腕輪をつけている方などもいらっしゃいます。もちろん何もつけずに暗い色の服を着ている方もいらっしゃいますが、人や車との接触事故防止のために何かしら対策はしておいても損はないと思います。

以上です。快適なランニングライフの参考になれば幸いです。

30代女性(授乳中)、大腸内視鏡検査を受けるの巻

はじめに

当方、30代女授乳中ですが、健康診断の便潜血で陽性だったため大腸内視鏡検査を受けてきました。(結果は異常なし)
同じように検査を受ける方の参考になればなと思い以下記します!

(文字ばかりで恐縮です・・・)

 

 

検査前日から検査翌日以降まで流れ&感想

前日

朝(4時台)に牛乳をコップ一杯ほど飲みましたが、朝・昼・晩の3食は、大腸内視鏡検査用の検査食を食べ、それ以外は頑張って我慢しました。
お茶(麦茶)は1日約2Lは飲もうと心がけているので普段通り飲みました。

※なお病院によって食事制限の考え方は異なる(数日前から制限するべきというものから前日にちょっと気をつければOKというものまで)ようなので、検査を受けにいく病院のWEBサイトなどを確認しておくのがベストです。

検査食は以下をネットで購入しました。私が探した範囲だと翌日配送に対応しているものがほぼ無かったので、受診予定日を決める際は気をつけたほうが良いです。

 

 

とても柔らかくて消化に良さそうでした。なお味は問題なく美味しかったです。ただ量は少なく、検査食の増量バージョンを買っておけば良かったかなあと少し後悔しました。

 

 

量が少なかったのと、検査食の箱により正確な検査のためにもしっかり噛んで食べるよう記載してあったのもあり、普段と比較にならないくらい噛んでゆっくり食べました。クラッカーもドロドロになるまで噛んで食べました。

検査食を食べたのと食べていないのとを比較していないので一概には言えませんが、検査時の大腸洗浄は割とスムーズだったと思うので検査食を食べて良かったと思っています。

 

当日朝 病院に行くまで

検査では2Lの液体を飲むということで、喉が渇いた状態にしておいたほうが楽かと思い水分も我慢しました。夏場は脱水に注意ですね。

 

当日 病院についてから〜大腸洗浄

病院について手続きをしてから、大腸内視鏡検査を受ける人達みんなでゾロゾロと検査の待合室に移動しました。検査の待合室では荷物を鍵付きロッカーに入れました。トイレに行く時に身軽にいけるので良いですね。50代以上かなという方が大半でしたが、若者も多少いました。男女比は半々くらいだったかなと思います。

 

待合室に着くと、人によって多少異なるものの、大体が2Lの大きなボトルとコップを渡されて半分を30分で、残り半分をもう30分で飲み切るように言われました。私は便秘気味で授乳中ということを伝えると、「ガスモチン」という薬を渡されて最初に飲むように言われました。胃腸を活発にする薬のようです。

 

朝から水分をとらず喉が渇いている状態だったので、一気に紙コップ3杯くらいを飲みました。スポーツドリンクのような味がしました。
30分くらい経ったくらいで、なんとなく便意があるような気がしたので初めてトイレに。ちょっとだけ固形物が出ました。
その後も頑張って洗浄液を飲んでいきました。だんだん洗浄液の味が辛くなってきたので、口の中に含む時間をなるべく減らして口の中に入れると同時に喉に流し込むような飲み方で、ちまちま飲み続けました。(一緒に検査を受けた人曰く、ビールを飲む時の飲み方らしい。) なんとか開始45分ほどで2Lを全て飲み切りました。
その間、恐れていたお腹の痛みは特になく、便意(液体がなんかお尻から出そうな気がする・・といったもの)を感じてトイレに行くと、お尻から液体が尿のように出ていくといったことを3、4回繰り返しました。

 

便が透けて色が薄い黄色のようになってきたら看護師さんに排泄物をチェックしてもらって洗浄完了。あとは内視鏡の順番が来るまでのんびり待ちます。
宿便が取れるってやつか〜!と思った割にあまり便もどきは出てこなかったです。

 

なお、トイレは検査の待合室に併設されており、男女共用で個室が複数並んでいるタイプでした。新しめの病院なら男女別だったりするのかなと思います。みんな状況が同じなのでお互い程良いよそよそしさを持って過ごしていたような気がします。女性同士だと雑談をしたり励ましあったりといった場面もありで、不安もありつつですがあまり不快感は感じずに過ごせました。

 

当日 大腸内視鏡検査

上の服はそのまま、下は下着と腰巻き(看護師さんがくれました)の状態に着替えたらベッドの上で横向きに寝ます。なお、検査途中でお医者さんと看護師さんの指示に従って仰向けに態勢変更します。
下着を少しずらしたら、大腸の端までカメラがついた長い管をお尻からどんどん入れていきます。麻酔なしでした。麻酔について何も話がなかったのでこの病院では基本麻酔なしでの実施なのかもしれません。
大腸の様子はモニターで観れます。お腹の中を何かが進んでいる・・という感覚はほんのちょっとだけ感じました。私は割と腸がねじれていたそうなのですが、大腸の端まで進む中でねじれた箇所に出会うたびにいててててて・・・というのがありました。(出産時の陣痛を思い出しました。)
大腸の端までたどり着いたらあとは引き抜いていきながら細かくチェックしてくださったようです。ねじれは解消されたので、引き抜く際は特に痛みはなく、モニターをみる余裕も生まれました。

なお、洗浄液は大腸の中に残っていても、歯医者さんの唾液を吸い取る機械のようなもので吸い取りながら検査してくれるので大丈夫みたいです。

検査結果はその場で教えてもらえて、大丈夫とのことでした。
麻酔も使ってないので授乳も問題なし、健康なので食事も普段通りに戻して良いとのことでした。授乳がどうなるかなと不安だったので麻酔なしでやりきれたのは良かったです。

 

当日 帰宅

お腹の中にガス(検査の時に大腸を膨らませたりするので空気が入るらしい)が溜まっている感じと、お尻から液体が出そうな気がする、というのが時々感じられたので電車は無理せず途中下車しながら帰宅。
遅めの昼ごはんはガッツリ揚げ物付きのカレーを食べましたが、非常に美味しくいただきました。

帰宅後も、時々お腹がぐるぐるぐる〜と音を立てたり、便意やガスのようなものを催すものの、割と普段通りに過ごせました。

 

翌日以降

腸のねじれを治してもらえたからなのか、ちょっと便が柔らかくなったような気がします!(関係あるかは不明)

 

 

検査おすすめ持ち物

  • 財布
  • 保険証
  • お薬手帳
  • 暇つぶしグッズ(スマホや本等)
    • 看護師さんによると、大腸洗浄液を飲んでからは座りっぱなしではなく多少動いたほうが早く洗浄が終わりやすいそうです。なので実際に読む時間は少ないかもしれませんが、洗浄が終わってからの診察待ちなどもありうるので持っていても損は無いと思います。
  • 着替え(下着・ズボン・靴下)&汚れたものを入れるビニル袋
    • もしも漏れたときに備えて安心材料として持っていくと良いと思います。
  • ハンカチタオル複数枚
    • トイレに何度も行って何度も手を洗う羽目になるので、小さなハンカチだとすぐ湿ってきます。
  • スポーツドリンク
    • 飲むのは検査終了後です。洗浄液の影響で脱水症状になりやすいらしく(水分を吸収する前に排出されているから?)、夏場などは検査後には飲めるように準備しておいたほうが良いと思います。
  • 羽織るもの
    • 常温とはいえ2Lの液体を飲むので人によっては体が冷えるかも?トイレでもお尻を出すので寒がりの人は寒さ対策をしても良いかもしれません。実際一緒に検査を受けた方で寒いとおっしゃってる方もいました。待合室にはヒーターも一応用意されていました。

 

終わりに

・洗浄液を飲むのは味が苦手でちょっとだけ大変でしたが、それ以外は大腸がリセットできるし健康かどうかわかるし検査後のごはんは美味しく感じるしで思ったほど嫌でも無いかな〜という感想です。一緒に検査を受けた方によると、胃カメラよりましとのことです。
大腸がんは女性のがんによる死亡原因の第1位だそうです。早期発見のためにも、大腸内視鏡検査は40歳以上なら毎年受けたほうが良いらしいです!この記事が検査が不安な方に届いて少しでも安心材料・受診の一押しになりますように。

 

 

以上!