eityansメモ

eityansメモ

ゆるくやっていきます

記事一覧

2026年に読んだ本

随時更新していく。上に行くほど最近読んだ本。

うつ病九段

棋士がうつ病になったときの記録。うつ病は心の病気ではなく、脳の病気であることは認識を変えなければならない。5手詰めで躓く話を見て、うつ病の恐ろしさを感じた。今までできたことができなくなることの恐怖や絶望に対して立ち向かえるところがすごいし、それの原因でもあり糸口でもある将棋はやはり魅力的なものだと思った。

1/15 読了

2025年を振り返る

2025年を振り返る。推敲せず、思うままに

転職した

【IVRy入社エントリ】きっかけは壁。成長を求めて入社しました|eityans

はじめまして。@eityansです。「えいちゃん」と呼ばれています。エンジニアとして2025年の7月にIVRyに入社しました。(社員番号は267番) アイブリー - IVR・電話自動応答サービス アイブリーは1日100円から利用できる電話自動応答サービス(IVRシステム)です。自由な分岐設定と自動応答・SMS返信・電 ivry.jp IVRyはオフィスにボルダリングの壁がある会社で、自分は壁がきっかけで入社しました!スタートアップへのジョインのきっかけはいろいろあれど、壁がきっかけの人は少ないんじゃないかなと思います。 自己紹介・経歴 昔からいろいろな

note(ノート)
【IVRy入社エントリ】きっかけは壁。成長を求めて入社しました|eityans

今年のビックイベントはなにかと聞かれたらやはりこれかなぁ。

新しい環境に入って半年経った。とても楽しくやっている。やっている内容が新鮮で楽しいし、一緒に働く周りの人がとても優秀で刺激になる。組織としても、個としても高まって、それがAIですごい勢いで加速しているような、そんな高揚感がある。

働き方も満足している。現在はハイブリッドで、週1,2回オフィスに行く。

フルリモートが急にしんどくなった

フルリモートの会社に1年半ほど務めている。 今の会社はフルリモートの中でも究極だと思う。朝会が毎日5~10分あるだけで、それ以外は一切会議がない。全てテキストコミュニケーション。リモートワークと仕事の効率に関する話がよく出てくるが、少なくとも今の会社においてはこのスタイルは一番効率的だと考えている。 フルリモートを始…

eityansメモ
フルリモートが急にしんどくなった

前の職場にいた頃にフルリモートがしんどいことを書いたが、極端なリモートがしんどいのかもしれない。Slackでのやり取りが活発で、meetで顔をみて会話すれば、リモートの環境でもあまりしんどさは感じない。

会社でポーカーが流行っているのもたのしい。オフィスに行くとたいていポーカーしてる。

ポーカー

今年は韓国、オーストラリア、台湾、カンボジアでポーカーをした。合わせて35時間ぐらい?

国内のアミューズはほとんど行っいない。友達に誘われたときに行くぐらいだし、一人ではあまり行かなくなったかも。海外でポーカーすると国内で遊ぶ気にあまりならなくなる。

JOPTに初めて参加した。608人参加で70位ぐらい。まぁまぁ走ったので楽しかった。

転職先でポーカーがブームになっていてとても楽しい。ディーラーもっとうまくなりたい。

クライミング

結構楽しくやっている。最近は自分が苦手だと思っていたピンチが成長しているのを実感している。整体との相性がいい。

旅行

今年も色んなところに行った。

1月

韓国

image

2月

オーストラリア・ニュージーランド

imageimageimage

ロイズピークの景色は良かった

3月

川越。このうなぎが美味しかった

image

5月

瑞垣

image

6月

鎌倉

image

八丈島

image

柏島

image

7月

宇都宮

image

8月

台湾

image

11月

カンボジア

image

12月

岡山香川徳島

image

インプラントの手術をした(3回目)

インプラントの手術を受けたメモ

前歯のインプラントの手術をした。複数回手術を行う。せっかくなので記録を残す。,,骨を足す手術(0回目),2023年の9月に実施。お値段は19万円。インプラントの基本的な流れとして、骨にインプラントを埋め込むためのボルトをいれる手術を行い、その後にインプラントをいれる手術を行う。自分の場合は骨がとても薄く、まずその骨を増やす手術から行った。,手術を行ったが結果あまり骨がくっつかず、最終的に今のお医者…

インプラントの緊急手術をした

,前回手術をして、経過観察中に緊急手術になったのでメモ,,前回の手術から一ヶ月以上経過した。食事や飲酒も自由にできていたが、手術をしたところが少し痛み始めた。,経過観察の予定があったので、痛み始めてから4日ぐらいのタイミングで再び歯医者へ、先生曰く内部で感染を起こしている可能性があり、切除するために切開するとのこと。,歯医者のあとに飲む約束をしていたが、流石に健康を優先した。(ガチのドタキャンで申…

インプラントの3回目の手術をした。今回は土台を用意する手術。

手術をするともうその日が終わってしまうので夕方からにした。 午前はボルダリングで軽く登った。しばらく登れないかもしれないし。

歯医者にありがちの少し待たされてからのスタート。麻酔がうたれ、いつもの心臓が早くなるやつを感じる。右前歯が痛むのでそこだけ麻酔を追加。めちゃくちゃ唇が腫れる。

手術はいつも通りやることがない。術中ドリルで穴を開けているっぽい振動を感じた。多分土台を作っていたのだと思う。

手術中毛布をかけられていたが、そのせいで暑くて下半身だけ汗をかいてしまった。あと何回か寝てた。

手術自体は2時間半ぐらいかかった。レントゲンを撮り、ボルトがしっかり入っていた。

今回の手術は上顎の歯茎を大きく切っている(歯茎の移植をしたらしい)ため、血がかなりにじみ出てくるらしい。枕にタオルを巻くことを勧められた。2,3日はそういう状態になるらしい。

最後に抗生物質と痛み止めをもらった。手術をしているところはしばらく歯を磨けない。液体ハミガキを勧められたので購入。手術費用は11万円。麻酔直後は大きく腫れていた唇も収まっていたので、特にマスクなどはせず帰宅。

手術直後は、前回と比較するとそこまでダメージを受けていない印象だったが、帰宅するにつれてどんどんダメージを感じてきた。帰宅後口をゆすいだらずっと血が出ていた。ゆすぐのはやめ、1時間ほど横になっていた。そのあとゆすいだら血がだいぶ収まった。

血が収まっていそうだったので夜ご飯としてビーフシチューを食べようとしたが、傷口がとても痛むので全部食べられなかった。せっかく作ってもらったのに申し訳ない。空腹だが今日はこれ以上食べないほうがいいと判断。口の中にでかい口内炎や、上顎の側の激しいやけどをしているような感覚。

シャワーに入り、歯を磨いて就寝。


2日目

思ったより血は出ていなかった。ただやけど感は常にある。やけど感を刺激しない食べ物が良さそう。

朝はプロテインを摂取。そこまで染みずに飲むことができた。抗生物質と痛み止めを飲んだ。痛み止めは念の為。

昼は冷たいそばを食べた。これならしみない。

誘われたのでポーカーをして過ごす。気が紛れてありがたい。

夜はまた冷たい蕎麦を食べる。ヨーグルトをプレーンの状態で摂取。

あとプリンを2個食べた。


3日目

喉風邪を引いたっぽい。血は一切でない。やけど感はある。

月曜日、リモートワークができるのでありがたい。社内ハッカソンが楽しかった。

朝プロテイン、昼そば、夜は鍋に挑戦。十分冷ませば食べられた。雑炊も冷ましながら食べることができた。ヨーグルトはプレーン。

痛み止めは継続して飲んでいる。喉風邪もあるので早めに就寝。


4日目

痛みで朝の5時半に目が覚める。痛み止めを飲む。

リモートで仕事をしていたが、体調がひどくなったので早退。多分喉風邪が原因。

鍋を食べるが食べるときの痛みが強かった。


5日目

定期的に痛み止めを飲む。喉風邪はだいぶ収まった。

昼も夜もうどん。夜にアイスを食べたらとてもしみる。このタイミングで初めて傷口を見る。でかい穴が空いて赤くてびっくりした。傷口を見たらよりいっそう痛く感じてしまった。毎日ヨーグルトを食べていたが、これ以上口にものを入れる気がしなくなったので、歯磨きにして寝ることにする。


6日目

上顎の傷口が痛い。回復している感覚もない。

朝はプロテイン。昼にそばを大量に食べたけど、そのときに口の中を傷つけたかもしれない。夜ご飯のときに傷口が痛すぎてご飯を断念してしまった。プロテインもしみるようになった。

昼間は痛み止めを飲んでいたが、寝る前の痛み止めは飲まなくなった。


7日目

鏡で傷口を見ると、前見たときよりは収まっているように見える。ただ痛みはひどく、プロテインを飲むのも5分ぐらいかかった。傷口に影響を与えたくないので、今日は思い切ってプロテインだけ摂取しようと思う。

ボルダリングをした。


8日目

上顎の傷口がずっといたい。朝昼プロテインで、夜薬局に行って口内炎用の塗り薬を買った。ステロイド成分が入っているものと、入っていないものが選べた。よくわからなかったがステロイド入りを購入。塗ったら膜ができるので少しだけ落ち着いた。痛いけどご飯(鍋の残りとうどん)も食べられた。

この日も軽く登ったが、アップの段階でいつものと違う感覚だと思いすぐに帰った。登るたびに傷口が痛み、ほとんど食べ物を食べていないせいか瞬発力が出ない。


9日目

朝口の中が乾燥して激しい痛み。ヒィヒィしながらプロテインを飲み、術後検診で歯医者に。

歯医者いわく順調そうに治っているとのこと。「こんなに痛いのに?」と思ったけど順調そうならよかった。上顎の糸を切ってもらう。糸を切ってもらったら痛む範囲が減った気がする。糸によって過敏になっていたのかも?

口内炎用の塗り薬は治りを遅くするからあまりやらないほうがいいとのこと。抜糸によって少し痛みに耐えられそうになったので今日は薬を塗らなかった。帰りに池袋にできたARC'TERYXのお店に寄って、シューズバッグをもらった。百貨店で布団を衝動買いした。

昼はうどんを食べ、お出かけで六本木。出汁のお店で何故か一口チキンライスが配布されており、食べてみたら口の中が崩壊した。痛すぎた。

夜は鍋。野菜とうどんはしみるが全然食べられる。ヨーグルトは冷たさが刺激になるのか断念した。


10日目

口の中が乾燥して舌と傷口が張り付いたのか異常に痛かった。即痛み止めを飲む。

プロテインを飲もうとしたが、冷たさが染みてしまうのかすごく痛い。医者には勧められていないけど口内炎の塗り薬を塗って飲んだ。昼はうどんを食べた。

傷口は左側が相変わらず痛い。触っちゃいけないのだろうけど、つい触ってしまう。

医者にステロイド系の薬は治りを遅くすると言われていたので、薬局に行きステロイドが入っていない口内炎の薬を新たに購入。口につけるとものすごいゼリーになる。膜があるだけでありがたい。

夜は鍋を食べた。右側だけで噛みながら食べると、しみるにはしみるが割と普通に食べられた。

ヨーグルトは冷たくて染みてしまい断念。ただ昨日ほど痛くはないかも。

ゼリーの塗り薬を塗って寝る。


11日目

ここ数日続いていた乾燥による痛みがなかった。昨日塗り薬を塗ったおかげかも。

プロテインも冷たさはしみるがこれまでほどではない。少しずつ回復を感じている。

上顎の左側はまだ食べ物が当たると痛い。右側で基本的に噛む。

今日はヨーグルトに挑戦。右側中心で食べることで久しぶりに食べることができた。嬉しい。

ゼリーの塗り薬を塗って寝る。


12日目

確実に回復している。食べ物を食べたときの染み方が減った気がする。基本的に右側で噛む。

今日は痛み止めを飲まなかった。


13日目

塗り薬を塗らなかったからか、朝傷口が乾燥して痛かった。塗り薬は塗ったほうがいいのかも

昼は挑戦してトマトとの生ハムの冷製パスタを食べた。右噛みメインで食べたけど、多少染みたくらいで収まった。かなり回復している。

今日も痛み止めを飲まなかった。塗り薬を塗って寝る。


14日目

右噛み中心で色々食べられるように、パンも食べられた。みかんは食べられるが少ししみる。


15日目

会社でパーティがあり色々なものを食べた。右噛みなのは変わらないが、食べられるものが増えて嬉しい。夜にラーメンを食べた。太麺だったので傷口に触れてしまい少し痛かったが食べられた。お酒はまだ飲んでいない。

この日は塗り薬を塗らなかった。


16日目

抜糸した。まだ糸は残っている。カレーが食べられた


17日目

ついに酒を飲んだ。

買う理由が値段なら買わない、買わない理由が値段なら買う

これは自分が子供の頃から意識している考え方。最初に出会ったのはどこかの掲示板だったと思う。

持っているお金の量は変えられないが、その使い方で効用は大きく変えることができる。どうすれば効用を最大にできるかを考えることはとても大事。

自分の人生で軸にしている考え方はなんですか?と聞かれたらこれかもしれない。

この考え方の素晴らしいところは、お金を使うことも肯定していることだと思う。自分はむしろお金は使うべきだと考えていて、DIE WITH ZEROの考え方のように、経験は積極的にお金を払っているつもりだし、これからもそうしていきたい。

買おうとしている対象の本当の価値みたいなものに目を向けて、それが欲しいものなのかどうかを考える姿勢は、お金に限らず仕事にも応用が効きそうな気がしている。

その仕事をする理由が「時間があるから」なら、その仕事はしないほうがいいだろうし、その仕事をしない理由が「忙しいから」なら、その仕事はしたほうがいいと思う。

Next.js(Vercel) + Rails + Auth0を使ってログイン機能を作る

Next.js(Vercel)でフロントエンド、Railsでバックエンドを用意する。結構やることが多かったのでメモ。

原則は公式のドキュメントを参照

大きな流れ

なかなか全体像がつかみにくかった。今回取り組んでわかったことをまとめる。

  1. ユーザーはNextからログインや登録を行い、Auth0に遷移する。

  2. Auth0に遷移し、そこで認証を行う。認証が成功するとアクセストークンがJWTとして取得できるようになる

  3. Next側でそのJWTを使ってRailsに情報を連携する

  4. Rails側でJWTをパースし、問題なかったら処理を実行する

こういうことを行うためにこれから色々設定をする。


Auth0の設定

アプリケーションを作る

Reguler Web Applicationsを選択。アプリケーションを作ると、QuickStartでフレームワークごとの設定が案内されるので、原則そらのドキュメントに従う。

コールバックの設定

ローカル用と、本番のそれぞれを入力する。後述するSDKを用いればそのあたりのエンドポイントは勝手に作られる。

Next.js側の設定

Auth0 Next.js SDKをインストール

1npm install @auth0/nextjs-auth0

dotenvで環境変数を設定する

どう設定すれば良いのかはドキュメントに記載されてる。

SDK Clientを作る

サンプルをベースに少し改造

1// lib/auth0.js
2
3import { Auth0Client } from "@auth0/nextjs-auth0/server";
4
5export const auth0 = new Auth0Client({
6  domain: process.env.AUTH0_DOMAIN,
7  clientId: process.env.AUTH0_CLIENT_ID,
8  clientSecret: process.env.AUTH0_CLIENT_SECRET,
9  appBaseUrl: process.env.APP_BASE_URL,
10  secret: process.env.AUTH0_SECRET,
11
12  authorizationParameters: {
13    scope: process.env.AUTH0_SCOPE,
14    audience: process.env.AUTH0_AUDIENCE,
15  }
16  async onCallback(error, context, session) {ユーザー作成の処理}
17});
ここでonCallbackを設定して、認証後にユーザーの作成を実施するようにしている。

Middlewareの作成

このサンプルもドキュメントから。

1import type { NextRequest } from "next/server";
2import { auth0 } from "./lib/auth0";
3
4export async function middleware(request: NextRequest) {
5  return await auth0.middleware(request);
6}
7
8export const config = {
9  matcher: [
10    "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)",
11  ],
12};

ここまででログインやログアウトのエンドポイントが作られる。

ログインボタンの設置

1<a href="/auth/login">ログイン/新規登録</a>

ここでLinkなどを使うと先読みが入ってややこしくなるらしい。

Vercel側の設定

環境変数を設定する

設定した環境変数

  • AUTH0_CLIENT_ID

  • AUTH0_CLIENT_SECRET

  • AUTH0_SECRET

  • AUTH0_DOMAIN:https://を取り除かないとエラーがでる

  • AUTH0_AUDIENCE

  • AUTH0_SCOPE

  • APP_BASE_URL

最初環境変数の設定をミスっていてローカルでは問題ないのに本番でMIDDLEWARE_INVOCATION_FAILEDエラーが発生して詰まっていた。

Railsとの連携

この記事がわかりやすい。これに従って設定する。

Auth0APIの作成

Auth0のダッシュボードで作成。

Identifierと、ドメインの情報を記録する。これをRailsの設定に使う。

jwt gemの追加

1gem 'jwt'

Identifierと、ドメインの情報をクレデンシャルに追加

1EDITOR="vim" bundle exec rails credentials:edit --environment development
1auth0:  
2  api_identifier: xxx
3  domain: xxx

ここでのdomainはhttps://を含まない

JWTの検証をするクラスを作成

このあたりもドキュメントのママ

1# app/lib/json_web_token.rb
2require 'net/http'
3require 'uri'
4
5class JsonWebToken
6  def self.verify(token)
7    JWT.decode(token, nil,
8               true, # Verify the signature of this token
9               algorithm: 'RS256',
10               iss: "https://#{Rails.application.credentials.auth0[:domain]}/",
11               verify_iss: true,
12               aud: Rails.application.credentials.auth0[:api_identifier],
13               verify_aud: true) do |header|
14      jwks_hash[header['kid']]
15    end
16  end
17
18  def self.jwks_hash
19    jwks_raw = Net::HTTP.get URI("https://#{Rails.application.credentials.auth0[:domain]}/.well-known/jwks.json")
20    jwks_keys = Array(JSON.parse(jwks_raw)['keys'])
21    Hash[
22      jwks_keys
23      .map do |k|
24        [
25          k['kid'],
26          OpenSSL::X509::Certificate.new(
27            Base64.decode64(k['x5c'].first)
28          ).public_key
29        ]
30      end
31    ]
32  end
33end

認証周りのサービスクラスを作成

TokenVerificationを作り、認証してユーザーを返すAuthorizationServiceと、新規にユーザーを作成するUserRegistrationServiceを作る

1module TokenVerification
2  private
3
4  def http_token
5    if @headers["Authorization"].present?
6      @headers["Authorization"].split(" ").last
7    end
8  end
9
10  def verify_token
11    JsonWebToken.verify(http_token)
12  end
13end

1class AuthenticationService
2  include TokenVerification
3
4  def initialize(headers = {})
5    @headers = headers
6  end
7
8  def perform!
9    payload, _header = verify_token
10    User.find_by!(sub: payload["sub"])
11  end
12end

1class UserRegistrationService
2  include TokenVerification
3
4  def initialize(headers = {})
5    @headers = headers
6  end
7
8  def perform!
9    payload, _header = verify_token
10    User.find_or_create_by(sub: payload["sub"])
11  end
12end

認証用のコントローラーの作成

認証に成功したらユーザーを返す

1class SecuredController < ApplicationController
2  before_action :authorize_request
3
4  private
5
6  def authorize_request
7    @current_user = AuthenticationService.new(request.headers).perform!
8  rescue JWT::VerificationError, JWT::DecodeError
9    render json: { errors: [ "Not Authenticated" ] }, status: :unauthorized
10  end
11
12  def current_user
13    @current_user
14  end
15end

ユーザーの作成はUsersControllerに作成

1class UsersController < SecuredController
2  skip_before_action :authorize_request, only: [ :create ]
3
4  def create
5    user = UserRegistrationService.new(request.headers).perform!
6    if user.save
7      render json: user, status: :created
8    else
9      render json: { errors: user.errors.full_messages }, status: :unprocessable_entity
10    end
11  end
12end

これでログインまわりの機能ができた

前のページページ 1 / 13次のページ