sontixyou blog

技術まわり、ガジェット関連について

イタリア語の学習を始めた

背景

2024/09にイタリアへ行く予定を立てた。 学習のモチベは、イタリアの現地人の方と簡単なコミュニケーションを取れると、旅も楽しくなると思ったから。

目標

  • レストランで注文できる
    • おすすめの品とか聞けると最高
  • 市場で話しながら買い物できる

どうやって学習するか

YouTubeの以下の動画を見ながら、発音真似ている。 https://m.youtube.com/playlist?list=PLUcDBadaP5IUJYW6qn2jTH0Ik2EMvAPze

一通り見たら、単語を覚えつつ、文章作りたい。 イタリア語で簡単なブログを書きたい。

開発環境ソフト編 2023

2023年で使用していたソフトウェアをずらずら書いていく。

ソフト

ブラウザ

Brave

あらゆる広告を非表示士にしてくれるため、プライベートでは、いつも使っている。 https://brave.com/ja/

ブラウザ拡張機能

GraphQL Network Inspector

https://chromewebstore.google.com/detail/graphql-network-inspector/ndlbedplllcgconngcnfmkadhokfaaln?hl=en-GB&pli=1

普段の開発では、GraphQLを使用している。 Chromeの標準のネットワーク検証機能では、リクエストとレスポンスの中身を見ることが手間だった。 この拡張機能を導入したことで、リクエストとレスポンスの中身を簡単に見ることができるため、作業が捗る。

Wappalyzer

https://chromewebstore.google.com/detail/wappalyzer-technology-pro/gppongmhjkpfnbhagpmjfkannfbllamg

はじめて訪れたサイトでは、どんなフレームワークや言語を使って実装されているのか気になるので、入れている。

エディタ

VSCode

https://code.visualstudio.com/

Github copilot chatを使うための専用機になっている。また、デフォルトの状態である程度使えるかつマークダウンのプレビュー機能があったりと重宝している。

Neovim

https://neovim.io/

普段使うエディタは、Neovim。Vimと違い、デフォルトで言語サーバーと通信する機能等が同梱されているため、LSPを利用したコード補完を設定することが楽。 また、最近は0から設定するのではなく、lazynvimというプラグインを使って、ある程度の設定を自動で行える仕組みが存在する。結構便利。

ターミナルエミュレータ

Wezterm

https://wezfurlong.org/wezterm/index.html

タブ機能が標準でついてるため、特にカスタマイズしなくても使える。 WeztermとNeovimの設定をLuaで書くことができるため、結構好き。 日本語の入力もちゃんとできることもポイント高い。

シェル

https://www.zsh.org/

zshをずっと使っている。コマンドの補完や入力履歴を辿る等のライブラリが豊富であるため、fishやnushellに乗り換えることは考えていない

フォント

SFMono Square

https://github.com/delphinus/homebrew-sfmono-square

このフォントの特徴が2つある。

  1. 半角2文字の幅と全角1文字の幅が等しく、表示される。
  2. 全角スペースが◯として表示される。コード内に全角スペースがある場合、すぐに気づく事ができる

また、Nerd Fontsに対応しているため、特殊な記号やアイコンも表示できる。

カラースキーム

One Dark

https://github.com/one-dark

基本的にダーク系のカラースキームを好んで使う。 onedarkを2年くらい続けている。 時々、カラースキームを変える場合は、capputinoに切り替えることが多い

https://github.com/catppuccin

2024年の目標

2024年の目標を決めていく〜

2023年の振り返りはこちらを参照 → https://sontixyou.com/entry/2023/12/21/215413

日頃仕事していると自分のスキルをもっと上げて、プロダクト開発へ活かしていきたいと痛感する一年でもあった。なので、そのあたりを深掘りながら、来年の目標を決めていきたい。

自分のスキルを上げるために

以下のあたりがもっと欲しいスキルであったりする。

  • システムの設計力
  • 仕様を把握できる力
  • 素早く実装できる力
  • 自分が関わるプロダクトのドメイン知識を増やしたい

これらの4つのスキルを伸ばしていくためには、どんなことをやる必要があるのか?

システムの設計力

  • テーブル設計について学ぶ
    • テーブル設計に関する本を読む
    • テーブル設計が必要な開発をたくさん行って、場数を踏む
  • システムアーキテクチャについて学ぶ

仕様を把握できる力

  • 自分とチームがスムーズに仕様を固めて、共通認識を持てるようにリードする力をつける
    • 実例マッピング以外にいい方法がある模索していく - ユーザーのどんな課題をどんな手法で解決していくのか。さらに、それをどうやってシステムへ落とし込んでいくのかを決めていく力をつける
    • 仕様把握を素早く行って、実装するまでの時間を縮める
      • 機能の設計から関わるまたは機能を実装途中から合流する場合も含む

素早く実装できる力

  • RailsRubyの知識をたくさん吸収しつつ、アウトプットする
    • Railsガイドを定期的に読み返す
    • なにかしらの自作ライブラリを1つ以上作成する。新しい言語に挑戦したい場合、Rubyでなくてもいい。
    • InteractorやServiceなど、Railsを拡張していく部分について知る。そして実践する
  • SQL周りなど実装に必要な知識を足す
    • 複雑なSQL(select, join, groupなどの複合技のパターン)をスラスラ読めるようになる
      • 読むことに時間がかかるため
  • フロントエンド周りの知識(これは余裕あれば)
    • Reactの記法あたりは読めるようになっておく

自分が関わるプロダクトのドメイン知識を増やす

  • 開発生産性に関する本を読む
    • DevOpsの科学(リピート)
    • etc

スキル以外のこと

旅行編

その他

  • 好きなアーティストのライブ行く
  • 自作キーボードを作る
  • LT登壇する
  • コントリビューション数を10,000 OVERする
  • 吸収した知識や取り組んだことをアウトプットする
    • 2023年の振り返りをやるときに、その年になにをやっていたのか辿るのが大変だった

2023年の振り返り

2023年の月ごとの振り返り

1月

shibuya.rbに初参加! RubyKaigi 2022へ行って以来、Rubyコミュニティに参加できていなかったため。

2月

https://regional.rubykaigi.org/fukuoka03/

RubyKaigi 2022以来、でかいカンファレンスに参加できることが楽しみでウキウキ楽しかった。ここでANDPADの方と話して、転職しよと決断した。

3月

転職活動をメインにやっていた。働きながら、転職活動をするのは大変だった。しかし、前回の転職時も同じよう感じだったので、そこまで苦ではなかった。

4月

転職先が決まったので、そのときに働いている場所での引き継ぎ作業なんやらやっていた。

5月

ファインディ株式会社へ転職した。

GW開けに、RubyKaigi2023へ参加した。昨年、会ったRubyistや福岡でお会いした方とも再開できて、うれしみ。

また、コロナ明けで通常営業のRubyKaigiであったため、大規模であったし、Drinkupも最高だった。

新しい技術とプロダクトキャッチアップがとても大変な月だった。これは、9月くらいまで続く。がんばった、わし偉い。

6月

2回目のshibuya.rbに参加した。

人生で初LT登壇した。Neovimについて話した。初めてにしては、よくできたんでは?と思っている。

https://findy.connpass.com/event/283154/

7月

コロナがだいぶ落ち着いたこともあって、本格的に旅行したい気持ちが強くなったので、旅行リハビリがてら台湾へ2泊3日行ってきた。 台湾は5年ぶり2回目だが、とても楽しめた。

8月

仕事に忙殺かつお盆もあり、旅行は行かなかった。

9月

メタルギアコンサートが開催されると聞いて、参加してきた。 とても大満足なコンサートであった。

10月

仕事に忙殺されながら、月末に感染性大腸炎になって大変だった。 人生初MRIや直腸検査、内視鏡検査など自分が知らない世界を多く体験した付きだった。

なんとか回復したので、月末からイギリス旅行に行った。初の英語圏の国で乗り継ぎもはじめてで、終始楽しい旅であった。機会作って、また行きたい。次回は健康体でパブでビールをがぶがぶ飲みたい。

11月

私が携わっているFindy Team+がRuby Bizグランプリに受賞したため、その表彰式のために島根へ行ってきた。初島根だった。

さらに、表彰式の翌日はRubyWorldConferenceが開催されるため、そちらも参加してきた。RubyKaigiでは会えないような企業の方と会うことができて、とても良かった。

12月

VSCodeをメインに使ってきたが、Neovimへまたカムバックした。 VSCodeで使用していた拡張機能が安定していなかったため、Neovimへカムバックした背景がある。

2023年に決めた目標の進捗度合い

5月にRubyKaigiへ参加した後に、2つの目標を立てた。これらの進捗を振り返ってみよう

  • 英語力の底上げ 特にスピーキング
  • OSSコントリビュート
    • 目指せ5個

英語力の底上げ

正直な話、あまりできていない。イギリスへ旅行したときに、あまり意思疎通できていなかったため、とても悔しい思いをしたので、もっと底上げできるようにしたい

OSSコントリビュート

こっちは、進捗あった。7件PRがマージされたので、よしよしだと思う。 ほとんど、ドキュメント修正だったが、1件だけコード修正したものがあった。それが一番上にあるPR。普段使っているNeovimプラグインに対して、貢献できたのは自分の中では、とても大きいこと!偉い

https://github.com/nvim-pack/nvim-spectre/pull/192

https://github.com/yytypescript/book/pull/756

https://github.com/railsgirls-jp/railsgirls.jp/pull/694

https://github.com/railsgirls-jp/railsgirls.jp/pull/677

https://github.com/railsgirls-jp/railsgirls.jp/pull/703

https://github.com/railsgirls-jp/railsgirls.jp/pull/706

https://github.com/virtualshield/rails-graphql/pull/28

https://github.com/zed-industries/community/issues/1701

最後に

2023年は、転職したり、OSSコントリビュートや海外旅行など楽しい一年だった。 だけど、日頃仕事していると自分のスキルをもっと上げて、プロダクト開発へ活かしていきたいと痛感する一年でもあった。なので、そのあたりを深掘りながら、来年の目標を決めていきたい。

Neovim HEADをビルドする方法

Neovim Headをビルドすることがはじめてパターン

brew install ninja cmake gettext curl
git clone https://github.com/neovim/neovim
cd neovim
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=$HOME/neovim"
make install
export PATH="$HOME/neovim/bin:$PATH"

これをやると、$HOME/neovim/bin にneovimを起動するためのファイルが配置される

どこのディレクトリからもnvimコマンドでneovimを起動したい場合、.zshrcにaliasを登録すればOK

alias v='~/neovim/bin/nvim'
source ~/.zshrc

Neovim Headをビルドしたことがあるパターン

rm -r $HOME/neovim
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=$HOME/neovim"
make install
export PATH="$HOME/neovim/bin:$PATH"

これを毎回コマンドをコピペして実行することは面倒であるため、スクリプトファイルにまとめます。

# ref : https://github.com/neovim/neovim/wiki/Building-Neovim
if [ -d "$HOME/neovim" ]; then
  rm -rf "$HOME/neovim"
fi

cd $HOME/projects/neovim
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=$HOME/neovim"
make install
export PATH="$HOME/neovim/bin:$PATH"

血便が出たけど回復した話

人生で初めて血便が出て、感染性大腸炎になった。この記事投稿時には、だいぶ回復した。

この経験から2つの学びがあったので書き留める。

学び編

  1. 生焼けの肉や内蔵、生肉は食べるな

今回の感染性大腸炎になった要因は、これの可能性がある。自分の場合は、お店で食べた焼き鳥が半生?だったのが怪しそう。一本ずつ火が通ってるかを確かめていたわけではないため、あくまで推測

鶏肉にはカンピロバクターという菌がいる。 https://www.saiseikai.or.jp/medical/disease/infectious_gastroenteritis_caused_by_campylobacter/

  1. 血便出たら、病院行け

普段の便の色を覚えておくことは必要。便が赤茶色や真っ赤の場合、やばめなので病院行け

救急車を呼ぶレベルか迷ったら、「#7119」にかけて、判断を仰げる

※地域によって、対応可能エリアでない場合がある https://www.fdma.go.jp/mission/enrichment/appropriate/appropriate007.html

痛み始めから回復までの時系列

以下は症状悪化から回復までの時系列。グロめなことを書いてるため、グロ苦手の人は、読まないでいい。

2023/10/21

午後辺りからおへその左側辺りが、波のように腹痛が出始めた。このときは、食い過ぎによる一時的な腹痛で終わるかもしれんと思ってた。

2023/10/22

同じ箇所で腹痛が続くため、治れ〜と思いながら1日休養のために家でゴロゴロしてた。この頃に、下痢気味になった

2023/10/23

腹痛ありで仕事に行った。午後辺り、下痢で四回くらいトイレに行った。

その際に、便の中に赤い点々を発見。見た目はいちごジャムのような感じ。

夜20時、池袋にある消化器科に行った。そこで、内視鏡検査するために、紹介状を書いてもらった。

お世話になった医師さんから、真っ赤な血便が出た場合「#7119」にかけて、対応方針を相談してくださいと言われた。

夜22時に真っ赤な血便が出た。見た目はケチャップだ。#7119に電話して、今日の午後からの症状を伝えた。すると、すぐ救急車呼んで病院行ってくださいと言われた。

救急車呼んで、病院へ行った。 そこでは、2.3日以内に食べたものを聞かれた。次に、肛門に指を入れてもらって、血がついていることを確認。直腸に出血?がないかも確認していただいた。さらに、大腸等から出血がないかの確認のために、CT検査と血液検査をした。

CT検査と造影剤すごい。機械がまじ未来感あった。 CTスキャンの画像からは出血を発見することができず、原因特定にはならなかった。

翌日の午前に、通院するように言われたため、一旦帰宅

2023/10/24

まだ便は下痢で赤茶色。真っ赤ではなくなった。終日今までと同じ箇所で腹痛あり 午前中に昨日訪れた病院へ行き、問診兼肛門の確認をしていただいた。 原因を特定できないことから、内視鏡検査をすることになった。内視鏡検査の予約をした。

消化に良いもの限定で食べて良いとのことなので、素うどんを食べた。 ここから素うどん生活が始まった。

夜21時に下剤を飲んだ。この下剤は翌朝に便が出るようにするためのもの。

2023/10/25

便は赤茶色で固形と下痢の中間くらい 昨日あった腹痛はだいぶやわらいだ。ほとんど痛みがなくなった。

午前8時半に病院に行き、検査待合室でモビプレップ(下剤)を飲むスタンバイ。

モビプレップは腸管洗浄剤で、腸の中を空っぽにするためのもの。味はポカリスエットにリンゴ風味を加えた感じ。モビプレップ1.5Lと水1.0L飲んで、午後から内視鏡検査を開始。

検査中、炎症起きている部分を画像撮影しつつ、炎症箇所や晴れている箇所の組織を採取していた。腸の壁から組織を取るのは全然痛くない。痛みを感じなかった。組織検査の結果は、2週間後に分かる。

内視鏡検査が大腸へ入るために空気を大腸へ流し込みながら行うため、終始お腹がパンパンで苦しかった。

自分の臓器を見れるのは、なかなかない機会なのでそれはそれで良かった。

10/27

腹痛はほとんどなし。便は茶色へ戻った。 午後に血液検査のために、通院。 白血球の項目が、10/23の検査結果より低くなったため、ほぼ回復

終わり

RailsのActiveRecord AVG編

average_ageをSQLだけでどう取得できるのかを考えてみる

普段、極力SQLを使わずに書くなら、こうなるかと思う。

def self.average_age
  ages  = all.pluck(:age)
  ages.sum / ages.count
end

SQLを思いっきり使用する場合、こう書く。

result = ActiveRecord::Base.connection.select_all('select avg(users.age) as user_age_avg from users ')
   (5.0ms)  select avg(users.age) as user_age_avg from users 
=> 
#<ActiveRecord::Result:0x000000010e334028
...
irb(main):061> result
=> 
#<ActiveRecord::Result:0x000000010e334028
 @column_types={},
 @columns=["user_age_avg"],
 @hash_rows=nil,
 @rows=[[0.5259e2]]>

ActiveRecord::Base.connection.select_value('select avg(users.age) as user_age_avg from users ')
   (37.5ms)  select avg(users.age) as user_age_avg from users 
=> 0.494038e2

ActiveRecord::Base.connection.select_value('select avg(users.age) as user_age_avg from users ').to_i
   (38.0ms)  select avg(users.age) as user_age_avg from users 
=> 49

SQLで平均値を計算するとなると、対数平均で算出する。 小数点を丸めたい場合、ROUND関数を使用することでそれが可能となる。

> result = ActiveRecord::Base.connection.select_all('select round(avg(users.age)) as user
_age_avg from users ')
   (4.8ms)  select round(avg(users.age)) as user_age_avg from users 
=> 
#<ActiveRecord::Result:0x000000010ecbac00
...
irb(main):063> result
=> 
#<ActiveRecord::Result:0x000000010ecbac00
 @column_types={},
 @columns=["user_age_avg"],
 @hash_rows=nil,
 @rows=[[53]]>
irb(main):064> result = ActiveRecord::Base.connection.select_all('select round(avg(users.age),1) as us
er_age_avg from users ')
   (5.0ms)  select round(avg(users.age),1) as user_age_avg from users 
=> 
#<ActiveRecord::Result:0x000000010e5343f0
...
irb(main):065> result
=> 
#<ActiveRecord::Result:0x000000010e5343f0
 @column_types={},
 @columns=["user_age_avg"],
 @hash_rows=nil,
 @rows=[[0.526e2]]>