「ステンレスフードスタンド」1周年記念日 #minneで買ってよかったもの

これは minne #買ってよかったもの Advent Calendar 2021 - Adventar の8日目の記事です。

こんにちはtanakenです。普段はminneを運営しているGMOペパボでSUZURIというサービスを開発しています。

minneの運営スタッフではないのですが、minneで買ってよかったものがあるのでAdvent Calendarの一枠をいただいて記事を書きます🖋

僕のminneで買ってよかったものはこれです。

minne.com

ちょうど1年前の2020年12月8日に使い始めました。今日は1周年記念日です🎂

Neko no OTAKUさんの作品で、さまざまなサイズ・用途のフードスタンドやステンレス製の作品が販売されています。

我が家の食事シーンを支えるフードスタンド
我が家の食事シーンを支えるフードスタンド

我が家のやんちゃな愛犬がガツガツと食事をしても、このフードスタンドは倒れたりすることなくしっかりと安定して支えてくれます。

以前はフードボウルを床に置いて食事をあげていましたが、身体が大きくなってきた愛犬にとっては位置が低すぎて食べづらいようでした。 それを見兼ねた妻が、この作品を見つけてくれました。

使ってみたところ、高さがちょうど良くて食べづらさは解消され、今では毎日の朝晩の食事と昼間の水分補給をこのフードスタンドが支えてくれていて、我が家の生活には欠かせないものとなっています。

これはフードスタンドを使って水を飲んでいる様子を撮影した動画です。顔が写っていてかわいいです。

1年間使い続けても劣化は見られず、まだまだ長く利用できそうです。

Neko no OTAKUさん、素敵な作品を作ってくださってありがとうございます。

来年もminneで良いものを買って生活を豊かにしていくぞ〜。

おしまい。

ペパボのCREとCSのイベントを開催しました

このイベントを開催しました。

pepabo.connpass.com

去年からやりたいなと思っていて、今年の8月末に改めて「やりたい!」と声を上げて準備を進めていきました。

元々はCREだけのイベントにするつもりだったのですが、最近の弊社CS室はテックな取り組みをたくさんやっていて面白いし、CTOのあんちぽ(@kentaro)さんがCS室の管掌役員になったことで、さらにテックに&面白くなっていくだろうと感じたので、CS室のメンバーと合同のイベントにすることにしました。

勢いだけで「やりたい!」の宣言をすると、人事のあちゃ(@achamixx)さんが様々な段取りを進めてくれて、めちゃくちゃありがたかったです。本当にありがとうございます。(3年前にも、あちゃさんの "のっていき" にめちゃくちゃ助けられたことを思い出しました。本当にありがたい...)

また、発表してくださったみなさん(@_ave_hさん、@3or9cakeさん、@__m5iさん、@Fendo181さん、@ot0m1さん)も、粛々と準備を進めてくださり、すてきな発表をしてくださいました。ありがとうございます。

特に@3or9cakeさんは、こういったイベントでの発表が初めてだったそうですが、そんなことを感じさせない、参加者の興味をそそる発表でした。 ご自身でふりかえりの記事を書かれていましたので下に貼っておきます。

自分は最初にSUZURIのCREチームの話、最後にペパボ全体のCRE/CSについての話、の計2回の発表をしました。

自分自身の最近のお仕事は、サービスの会計周りのことがほとんどで、ユーザに直接的に「安心して気持ちよく使えるSUZURI」を感じてもらうための取り組みはできていません。

「会計周りを整えることで組織としての信頼性を高め、間接的にユーザとの信頼性を高めている」と捉えることはできますが、やっぱり「この仕事の価値は...?」と思ってしまう瞬間は時々あります。

そんな中でも、こういったイベントを通じて自分のやってきたことややろうとしていることを再認識して、少しずつであっても活動を継続していくことで、自分自身や自分の周りの誰かに対して何かを残すことができたら良いなと思っています。

イベントの開催に携わったみなさま、そして、ご参加いただいたみなさま、本当にありがとうございました。

日記を書きはじめて1年経った

日記を書きはじめて1年経ったのでふりかえりをします。

最近はじめたPodcastでもこの話をしたので聞いてくれたら嬉しいです。

書き始めた理由

2020年10月11日に日記をはじめました。

2020年の7~10月くらいは公私共にとても忙しくしていて、自分自身のことに向き合う時間が取れていないように感じていました。

日記を書くことで、自分の考えを文章にして自分自身と向き合うきっかけづくりをしたかったのだと思います。

そんな思いはこのページに書き出してありました。

最近考えてること2020-10 - tanaken0515

書くにあたって工夫したこと

日記を書くにあたって最も優先したことは「書き続けること」です。

それを実現するためにいくつか工夫をしました。

1. タイトルをつけない

日記のページのタイトルは日付だけにしました。 タイトルを考えようとすると、それだけでも少しだけハードルが上がってしまうと考えたからです。

2. 毎朝、その日の日記のリンクをSlackに通知する

Rubyのスクリプトを書いて、GitHub Actionsを使って毎日Slackに通知を送るようにしました。

Scrapboxには /ページ名?body=hogehoge という形式でリンクを開くと、 body に渡した値を本文としてページを作成する機能があります。(詳しくはページを作る - Scrapbox ヘルプを見てください)

この機能を活用して、ページタイトルとしての日付とタグなどの本文を入れたリンクを作って通知しています。

f:id:tanaken0515:20211031203421p:plain

3. リンクを開きたくなるような工夫をする

これは細かい話ですが、

日付系のタグをつける(祝日と祝日名のタグもつける)

f:id:tanaken0515:20211031205359p:plain

Yahoo!きっず今日は何の日 のリンクをつける

f:id:tanaken0515:20211031205807p:plain

などをやっています。

日付のリンクがつながっていくのは楽しいですし、今日は何の日か知るのも楽しいのでリンクを開くきっかけになっています。

4. 書かない日があっても気にしない

最後に、心構え的な話なんですが、書かない日があっても気にしないようにしてます。

「書き続けること」を優先してますが、それは「絶対毎日欠かさずに書くこと」ではないです。

1年とか2年とか、そういうスケールで見たときに「だいたいほぼほぼ毎日書いてる」という状態を目指しています。

なので、書かない日があっても気にしません。実際にこの1年で書いていない日(ページすらつくっていない日)もあると思います。調べてないけれど。

自分に向き合う時間が作れていればいいので、毎日書くこと自体はどっちでもいい、というスタンスです。

1年間継続しての感想

やったこと、思ったこと、などの記録が残っていて楽しいです。

何かをはじめたりやめたりした日が明確に分かるのも面白いですね。

今後

工夫のところに「1. タイトルをつけない」を挙げたんですが、2年目を迎えたし、タイトルをつける良さもあるので、つけようかな?どうしようかな?と揺れています。

あとはGitHub Actionsでの通知の仕組みを雑に作ってある(毎回bundle installしてて優しくない、など)ので、もうちょい良い感じにするなどしたいです。

Enumerable#all? と Enumerable#any? の実装を読んだ

約3年前にEnumerable#all? が罠っぽかった - tanaken’s blogという記事を書いたのですが、Rubyの実装には踏み込みませんでした。最近気になってRubyの実装を読んだので、その結果を書いておきます。

Enumerable#all? / Enumerable#any? とは

Enumerable#all? (Ruby 3.0.0 リファレンスマニュアル)

すべての要素が真である場合に true を返します。偽である要素があれば、ただちに false を返します。

Enumerable#any? (Ruby 3.0.0 リファレンスマニュアル)

すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。

Enumerableなオブジェクトに対して、すべての要素が真であるかどうかを調べたい時は all? を、どれか一つでも真の要素があるかを調べたい場合は any? を使うことができます。 個人的な経験では業務コードでも何度かお世話になっているメソッドたちです。

[3, 6, 9].all? {|v| v % 3 == 0 } # => true (すべての要素が3の倍数)

[1, 2, 3].all? {|v| v % 3 == 0 } # => false (3の倍数は3だけ)

[1, 2, 3].any? {|v| v % 3 == 0 } # => true

便利なメソッドですが、要素が空のオブジェクトに対しての挙動に注意が必要です。

[].all? {|v| v % 3 == 0 } # => true

[].any? {|v| v % 3 == 0 } # => false

これを日本語で表現すると

  • 「空配列の要素はすべて3の倍数ですか?」「はい
  • 「空配列の要素のうちどれか1つは3の倍数ですか?」「いいえ

というように読めてしまいます。

個人的な感覚では、一つ目の問いに対して「いいえ」と答えるのが正しいように感じます。

自身の感覚と実際の挙動とのギャップがあったので "罠っぽかった" と題して書いたのが冒頭に紹介した記事です。

今回の記事について

Enumerable#all?Enumerable#any? の挙動がどのような実装によって実現されているのかを知ることがゴールです。

次の4項目について書いていきます。

  • 読むべきコードにたどり着くまでの道のり
  • 雰囲気コードリーディング
  • Enumerable#all? の実装について
  • Enumerable#any? の実装について

読むべきコードにたどり着くまでの道のり

さて、どういう実装になっているか知りたい、という状況なので、https://github.com/ruby/rubyのコードを読めばいいわけです。

が、さっそく迷子になりますよね。普段からruby/rubyのコードを読んでいるわけでもないし、C言語に精通しているわけでもないのでさっぱりです。

そんな時にRubyリファレンスマニュアルが便利です。

Enumerable#all? (Ruby 3.0.0 リファレンスマニュアル)の右上に [rdoc] というリンクがあるのでそれを開きます。

f:id:tanaken0515:20210926174234p:plain

このページ https://docs.ruby-lang.org/en/3.0.0/Enumerable.html#method-i-all-3F が開くはずです。 この画面でメソッド名にマウスカーソルを持っていくと、次のキャプチャのように click to toggle source という表示が出てきます。

f:id:tanaken0515:20210926174523p:plain

クリックすると実装コードをみることができます。

static VALUE
enum_all(int argc, VALUE *argv, VALUE obj)
{
    struct MEMO *memo = MEMO_ENUM_NEW(Qtrue);
    WARN_UNUSED_BLOCK(argc);
    rb_block_call(obj, id_each, 0, 0, ENUMFUNC(all), (VALUE)memo);
    return memo->v1;
}

これだけでもざっくり実装内容が分かります。

さらに、https://github.com/ruby/rubyでどのファイルを読めばよさそうか知りたければ、この実装を元にキーワード検索するとだいたいわかるんじゃないかと思います。

今回は enum_all で検索してみます。

https://github.com/ruby/ruby/search?q=enum_all

f:id:tanaken0515:20210926175158p:plain

enum.c で実装されていることが分かりました。

こんな感じで読むべきコードにたどり着くことができました。

雰囲気コードリーディング

C言語を雰囲気で読んでいきます。(筆者のC言語への理解度は、10年以上前に大学の講義でC言語やったことあるような無いような気がする程度です)

まずは click to toggle source で出てきた箇所のコードを読んでいきましょう。

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1530-L1537

static VALUE
enum_all(int argc, VALUE *argv, VALUE obj)
{
    struct MEMO *memo = MEMO_ENUM_NEW(Qtrue);
    WARN_UNUSED_BLOCK(argc);
    rb_block_call(obj, id_each, 0, 0, ENUMFUNC(all), (VALUE)memo);
    return memo->v1;
}

4行目の struct MEMO *memo = MEMO_ENUM_NEW(Qtrue); からは「true的な何かをメモしておくぜ」というような気持ちが窺えますね。

6行目の rb_block_call(obj, id_each, 0, 0, ENUMFUNC(all), (VALUE)memo); からは「いまからrubyのblockを呼び出すぜ?メモの値とENUMFUNC(all)を使ってな!」的な勢いを感じますね。

ENUMFUNC(all) ってなんですか?

enum.c のコードを読んでみると、それっぽい子がいました。

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1462

#define ENUMFUNC(name) argc ? name##_eqq : rb_block_given_p() ? name##_iter_i : name##_i

これの name = all ってことなので、なんとなく

  • argc が真なら all_eqq を使いなさい。そうでないなら次へ。
  • rb_block_given_p() が真なら all_iter_i を使いなさい。そうでないなら all_i を使いなさい。

のような感じでしょうか。

all_eqq / all_iter_i / all_i ってなんですか?

これら3つの実装を雰囲気で読んでみると、

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1466-L1489

#define DEFINE_ENUMFUNCS(name) \
static VALUE enum_##name##_func(VALUE result, struct MEMO *memo); \
\
static VALUE \
name##_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) \
{ \
    return enum_##name##_func(rb_enum_values_pack(argc, argv), MEMO_CAST(memo)); \
} \
\
static VALUE \
name##_iter_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) \
{ \
    return enum_##name##_func(rb_yield_values2(argc, argv), MEMO_CAST(memo));    \
} \
\
static VALUE \
name##_eqq(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) \
{ \
    ENUM_WANT_SVALUE(); \
    return enum_##name##_func(rb_funcallv(MEMO_CAST(memo)->v2, id_eqq, 1, &i), MEMO_CAST(memo)); \
} \
\
static VALUE \
enum_##name##_func(VALUE result, struct MEMO *memo)

とありました。DEFINE_ENUMFUNCS(name)name = all を渡すとall_eqq / all_iter_i / all_i が生まれそうな感じがしてきます。

どこかに DEFINE_ENUMFUNCS(all) を呼んでいる場所があるのでしょうか。

DEFINE_ENUMFUNCS(all)

すぐ下にありました。

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1497-L1504

DEFINE_ENUMFUNCS(all)
{
    if (!RTEST(result)) {
        MEMO_V1_SET(memo, Qfalse);
        rb_iter_break();
    }
    return Qnil;
}

おおよそ読むべきコードの見当をつけることができましたね。

Enumerable#all? の実装について

改めて enum_all のコードを見てみます。

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1530-L1537

static VALUE
enum_all(int argc, VALUE *argv, VALUE obj)
{
    struct MEMO *memo = MEMO_ENUM_NEW(Qtrue);
    WARN_UNUSED_BLOCK(argc);
    rb_block_call(obj, id_each, 0, 0, ENUMFUNC(all), (VALUE)memo);
    return memo->v1;
}

4行目:「true的な何かをメモしておくぜ

6行目:「いまからrubyのblockを呼び出すぜ?メモの値とENUMFUNC(all)を使ってな!

で、ENUMFUNC(all)の実体(?)はDEFINE_ENUMFUNCS(all)で生み出されています。

DEFINE_ENUMFUNCS(all)のコードを読むと、

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1497-L1504

DEFINE_ENUMFUNCS(all)
{
    if (!RTEST(result)) {
        MEMO_V1_SET(memo, Qfalse);
        rb_iter_break();
    }
    return Qnil;
}

もしもRTEST(result)が偽であれば、メモにfalse的な何かをセットしてイテレータをbreakするぜ!」と読めそうです。

これらの内容をまとめると:

  • Enumerable#all?の初期値(?)はtrueである
  • 要素を評価し、結果が偽であるものを発見したらfalseを返す

ということになりますね。

この理解に基づいて、要素が空のケースを考えてみると「要素をひとつも評価していないので、初期値(true)が返ってくる」と解釈することができます。

Enumerable#any? の実装について

読み方は all? の場合と同様です。

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1572-L1579

static VALUE
enum_any(int argc, VALUE *argv, VALUE obj)
{
    struct MEMO *memo = MEMO_ENUM_NEW(Qfalse);
    WARN_UNUSED_BLOCK(argc);
    rb_block_call(obj, id_each, 0, 0, ENUMFUNC(any), (VALUE)memo);
    return memo->v1;
}

4行目:「false的な何かをメモしておくぜ

6行目:「いまからrubyのblockを呼び出すぜ?メモの値とENUMFUNC(any)を使ってな!

そしてENUMFUNC(any)

https://github.com/ruby/ruby/blob/046f1bf492d707465c0fe90ea8bac34746c9455a/enum.c#L1539-L1546

DEFINE_ENUMFUNCS(any)
{
    if (RTEST(result)) {
        MEMO_V1_SET(memo, Qtrue);
        rb_iter_break();
    }
    return Qnil;
}

もしもRTEST(result)が真であれば、メモにtrue的な何かをセットしてイテレータをbreakするぜ!」と読めそうです。

これらの内容をまとめると:

  • Enumerable#any?の初期値(?)はfalseである
  • 要素を評価し、結果が真であるものを発見したらtrueを返す

ということになりますね。

この理解に基づいて、要素が空のケースを考えてみると「要素をひとつも評価していないので、初期値(false)が返ってくる」と解釈することができます。

まとめ

Enumerable#all?Enumerable#any? の実装を雰囲気でコードリーディングしてみました。

C言語の知識がなくてもなんとなく読むことができ、理解が深まった感じがします。

冒頭に書いた空配列に対する呼び出しについて、改めて日本語で表現すると

[].all? {|v| v % 3 == 0 } # => true

[].any? {|v| v % 3 == 0 } # => false
  • 「空配列の要素のうち、3の倍数ではない要素は存在しませんでしたか?」「はい(存在しませんでした(だって要素が1つもないからさ))
  • 「空配列の要素のうちどれか1つは3の倍数ですか?」「いいえ

ということになりますね。なるほどな〜。

おしまい。

読んで描いた「ソフトウェアの仕様、挙動、バグ、利用者の期待」

先日たまたま ソフトウェアの仕様、挙動、バグ、利用者の期待 - 29box を読んで、とても良いページだなと感じたので、自分なりに図を描いた。

描きながら思ったことたち:

「バグ」を「仕様」と「挙動」が一致していない状況のことである、と解釈をされていて、「同意〜」と思った。

利用者からの「バグですか?」という問いは「提供者さんの考える"仕様"と実際の"挙動"は一致していますか?」という問いと同じであると解釈できる。

この問いが提供者に与える価値はあんまり高くなりそう。なぜなら「仕様」も「挙動」も提供者が把握している(できる)情報だから。 (この問いを受けて新たな「挙動」が発覚するケースはあると思うので、その点においては価値があると思うけれど)

また、この問いは、利用者の情報を提供していないのだから、利用者の課題解決につながらない可能性が高そう。

提供者が知らない情報は「利用者がなにを期待しているか」なので、この情報が最も価値があるんだよなぁと思った。

なので利用者は「バグですか?」という問いよりも「OOになってほしいと思っています!」という問いを選ぶとよさそう。 提供者にとっての価値が高いし、利用者の課題解決にもつながる可能性がある。

一方で、提供者は「利用者がなにを期待しているか」を聞き出すように努めるとよさそう。

Next.jsで自分のサイトをつくった

つくった。

tanaken0515.com

つくりはじめるまで

今年の2月〜4月あたりに知り合いたちとモブプロで勉強するのにハマっていて、その題材としてReactとNext.jsのチュートリアルをやった。

Reactは2018年ごろにいっかいチュートリアルをやったのだけど、業務でもReactを使っているので改めてやってみることにしたのだった。

ja.reactjs.org

Next.jsはReactのフレームワークとして認識はしていて、「なんかめっちゃ便利らしい」ということだけ知っていたので面白がって取り組んだ。

nextjs.org

たしかに便利じゃん、ということがわかったので、これを使ってなにかつくろうかね〜ということで、自分のサイトをつくることにしたのであった。

つくるにあたって

まずはNext.jsのチュートリアルのコードをそのまま使う感じでつくり始めた。

Next.jsのチュートリアルはいくつかのレッスンに分かれていて、どのレッスンも途中から開始できるように「Download Starter Code」というセクションがある。 これが便利で、直前のレッスンをやっていなくても「直前のレッスンを終えた状態のコードがあるから、これを使いなよ?」と言ってくれるのだ。 (今後自分になにかのチュートリアルをつくる機会が訪れたら、この手法を取り入れたいなと思った)

で、今回は Assets, Metadata, and CSS | Learn Next.js のレッスンを終えた状態のコードからつくり始めることにした。

サイトのコンテンツを練るにあたって先輩方のサイトを参考にした。

サイトに経歴を載せたいな〜と思い、でもコンポーネントのデザインに時間を掛けたくないので、そういう便利なコンポーネントがありそうなUIライブラリを探した。

いくつか眺めてみると React Timeline component - Material-UI が一番しっくりきたのでMaterial-UIを使うことにした。

あとは、サイトを訪れたときに自分の最近の様子が伝わるといいなぁと思ったので、TOPICSという枠を設けてみた。 月に1~2件のTOPICが追加されるイメージ。 TOPICSや経歴の情報はYAMLで管理してる。

デプロイ先は Vercel を使っている。これもめちゃんこ便利。

ドメインムームードメイン | 欲しいドメインがすぐ見つかる。 で取得しました。ありがとうございます。

現職のGMOペパボでは「好きなドメイン無料」という福利厚生があるんですよね、ありがとうございます。

recruit.pepabo.com

ありがとうございます。

つくったあと

コンテンツをもっと充実させたいと思っていて

  • つくったもの
  • 書いたブログ(会社/個人)
  • 発表した資料
  • イベント参加の様子

あたりを追加する予定(未定)。

当初はブログの執筆もこのサイトに寄せてしまおうかなと(はてなブログを卒業しようかな)と思っていたのだけど、それ自体にそこまでのモチベーションはないのでどうしようかなというところ。はてなブログAPIを叩いて直近の記事数件のタイトルをサイトに表示(はてなブログへのリンク)って感じでも良いかもなぁ、など考えている。未定です。

親知らずを抜歯する

同僚が親知らずの抜歯エピソードをブログにしていました。

achamixx.club

人生の記録としてとても良いなと思ったので真似して書きます。

親知らずを抜こうと思ったきっかけ

虫歯の治療で歯科通院をしていて、親知らずの隣の歯を治療するにあたって「抜いちゃったほうがいいかもね〜、治療もやりやすくなりそうだし」とのことで抜くことにしました。

「うちの歯科クリニックではやっていなくて、近くの総合病院に紹介状を書くのでそこの歯科口腔外科で抜いてもらいましょう」となり、ああそうなんですね〜となりました。

過去に親知らずを抜歯したときは歯科クリニックでやった気がするので、そのあたりの運用とかルールとかはまちまちなのかな?

抜歯までにやったこと

初診の予約

歯科クリニックで紹介状をもらったのは3月末頃。

紹介先の病院に予約の電話をしたら「まずは初診になります〜」と言われ、いきなり抜歯ってわけじゃないんだなぁと思いました。

初診部分は歯科クリニックで実質終わっていて(レントゲンも撮っていたし)手術だけ紹介先の病院でやるもんだと思っていたので、このあたりの情報共有がもっとなめらかだと幸せになれそうだなぁと思いました。

「初診の予約を〜」とのことだったので「一番早くていつ予約できますか?」と聞くと「5月14日ですね〜」とのこと。

うお〜〜1ヶ月半も待つのか、、。まあそんだけ待つなら、仮に情報が共有されていても改めて診察する必要が出て来ちゃいそうですね。悪循環っぽい。

「じゃあその日でお願いします」といって予約しました。

初診・レントゲン撮影

レントゲンを撮影して抜く歯の確認をしました。レントゲンの写真撮っておけばよかったな〜と後悔しています。次なにかでレントゲン撮ったら絶対写真撮ります。

一部歯茎に覆われているので切る必要があるのと、歯を砕きながら抜いていく処置になるとのことでした。

「ほぼ確実に一週間は腫れるのでそのつもりでいるように」と言われたのと、手術の承諾書みたいなやつに「手術中に予定外の出来事が発生したら別の手術に変えるかも。そんときはやりながら意思確認するか術後にその旨を説明するからよろしくね」的なことが書いてあったので結構ビビっていました。手術承諾書の定型句なんだろうけど色々想像しちゃいますよね。

もともと自分は顎が外れやすくて、歯科治療中に顎が外れたことも何度かあったので、顎関連でなんかあったらやだな〜など考えていました。

(顎外れエピソードとしては、節分の日にあくびをしたら顎が外れて1時間以上そのまま戻らなくなってしまい、救急搬送されて口腔外科で顎を戻してもらった経験があります。帰宅して冷蔵庫にしまっておいた恵方巻をみて「絶対無理やろ、、、」と思った記憶があります。(小さく刻んで食べました))

手術の日取りを2週間後の5月28日と決めて、予約をして帰りました。

美味しいものを食べる

親知らずの抜歯後はご飯をまともに食べれなくなるだろうと予想していたので、抜歯までにとにかく好きなものを食べよう、という意気込みで過ごしました。

初診の翌日(5月15日)は自身の誕生日でもあったので鉄板焼きを食べに行きました。

f:id:tanaken0515:20210612095828p:plain

他にも、母からの誕生日ギフトでゲットしたすき焼きや、ふるさと納税の牛タン、回転寿司、行きつけのお店で油そばを食べました。

f:id:tanaken0515:20210612102335j:plain

抜歯ブームを観測する

同時期に抜歯する同僚たちがいて「この時期ってそういう時期なの?」と勘違いすらしました。

念のためtwitterで「親知らず」で検索して「みんな抜いている!」となりました(それはそう)

ついに当日!親知らずを抜く!

この日はお仕事を1日おやすみしました。 朝から自動車運転免許の更新も済ませたかったのでした。

免許の更新をスムーズに終えて、抜歯に行く直前にガストでランチをしました。

f:id:tanaken0515:20210612102529p:plain

すべての食事に「抜歯まえ最後のXX」と命名すると3倍くらい美味しく感じることがわかりました。

ガストのお手洗いで歯を磨きました。

いよいよ病院に到着し、受付を済ませ、大人買いした呪術廻戦を読みながら名前が呼ばれるのを待ちました。ドキドキしていたので内容がぜんぜん入ってこなかった。

名前が呼ばれ処置する席に座ると、まずは手術にあたって血圧を測定しました。術中も血圧測定器(腕に巻くやつ)をつけたままとのこと。「血圧が急変したら術式展開できるようにかな?」と思いました。

歯の周辺に麻酔を打たれるあたりから更に緊張感が高まってしまい、手や腕から冷や汗みたいなのが出ました。

3~5分くらい待って麻酔が効いてきたところで「じゃあ始めますね〜〜」と処置が始まりました。

ゴリッ、ゴリッ、ゴリッ。...。ゴリッ。

くらいで「あ、ラッキーですね〜、もう取れましたよ」と言われて「はへ!?」って声出ちゃいました。たぶん1分未満だと思います。

「これ縫わなくてよさそうだな。このままでいきましょう」とのことで、は〜そんなことあるんだ、と驚きました。

歯を砕きながら抜いていく処置になる予定でしたが、運良くきれいに抜けたとのことで、実際に抜けた歯を見せてもらいました。

持ち帰りますか?と言われたけれど、歯自体はきれいってわけではなかった(なので写真も取らなかった)し、正直持ち帰っても処分に困るなと思ったのでここで処分しちゃってくださいとお願いしました。

抜歯後、やっぱり痛いの?腫れるの?

運良くきれいに抜けたので、全く腫れませんでした!ラッキー!

抜歯当日は麻酔が効いていたのと、麻酔が切れそうなタイミングに備えて早めに痛み止めを服用したので、痛みを感じることもありませんでした。

翌日以降は痛み止めの服用をせずに過ごせました。

その後の流れ

1週間後に「抜歯後の経過観察」という名目でもう一度病院へ行きました。

先生が「はい、じゃあ糸抜きますね〜」と言うので「あ、自分縫ってないっす」「あ、そうでしたね。消毒だけしときますね」となるくらいには縫わないのが珍しいんだなと思いました。

とにかくラッキー!な抜歯でした。

余談ですが、偶然にも姉が同時期に親知らずを抜歯していて、姉の場合は一度抜歯を試みたところ局部麻酔ではうまく行かず、軽い全身麻酔をして一泊二日で入院をして抜歯することになったそうです。 こんなにも状況に違いがあるんですね。驚きでした。

これにて、自分は親知らずをすべて抜き終わったので、虫歯治療に専念できそうです! 先月から電動歯ブラシを導入したので、歯を大切にやっていきます!では!