今年はChatGPTをはじめとしたAIがエンジニアの仕事だけでなく、ITエンジニア以外の人にとっても身近に使われるようになってきた。
私はというと、まだAIにコードを書かせて完全にドライバの役割を明け渡すような事にはなっていない(そうするのが望ましいのにまだそのようにできていない、と表現するべきか…)が、レビューや調べ物などに便利に使わせてもらっている。
AIの到来によって働き方そのものが変わったほどの実感はないが、いずれ望むと望まざるに関わらずそういう時が来るだろうし、その時が来るのは予想できる範囲よりずっと早いのかもしれない。
お仕事の振り返り
今年は一社終わり、空いた分は既存のお仕事先の稼働を増やしたので新しく始まったお仕事は無し。そういう意味ではあまり動きがなかったとも言えるが、それぞれのお仕事でやった事は新しい学びも色々とあった。
そうなんだよな。沢山のやり切れなさ・遣る瀬無さ・どうしようもなさに直面しながら、それらと無駄に衝突せず、かと言って迎合もせず、できる範囲での最も最善に近い選択をし続けるしかないんだよな。
— ザネリ (@so_zaneli) April 15, 2025
2024年12月〜2025年6月 週2日 Kotlin
Ktor, kotlin-result, jOOQなどを使ってGraphQLサーバーをガリガリ書いていた。元々Scalaをやっていたので大きな驚きや新しい発見がそこまであったわけではないが、やはり新しい言語を触るのは楽しい。
しかし、やはりScalaとKotlinではnullに対する距離感みたいなものが割と異なる感あるな。mapNotNullもそうだけど、listOfNotNullしかりエルビス演算子しかり、Kotlinはnullが存在する事を前提にそれをどう安全に扱うかを意識していて、
— ザネリ (@so_zaneli) June 25, 2025
この会社では結局採用に至らなかったが、個人的にはRefinement typesを導入するのに向いているプロダクトだったと考えていて、技術的に検討していた事柄がこちらのお仕事で日の目を見ずじまいなのが勿体なかったので外部イベントでLTをしたりもした。
Kotlinの代表的な(?)SQLライブラリとしてはExposedがあるようで、このプロジェクトでも当初はこれを使っていたが、DB定義からKotlinコードを生成する機能がおそらくなくて、それができるjOOQに乗り換えたのは良い判断だった。
jOOQでIN句を使ったクエリが何故かコンパイルエラーになる、inメソッドは確かにあるはずなのに…と思いきやKotlinのinは予約後だったか。バッククオートで囲んで解決。
— ザネリ (@so_zaneli) January 23, 2025
jOOQわりと手に馴染んできた。KotlinでDBアクセスするコードを書くならExposedあたりよりこっちの方が好みだな。クエリDSLが「ライブラリの空気を読みながら出力してくれるSQLを探り探り書かないといけない」系じゃないのが良い。
— ザネリ (@so_zaneli) March 3, 2025
kotlin-resultもエラーハンドリングにちょうど良い薄いライブラリという肌感で、Scalaをやっている身としてはArrow-KTに飛びつきたくもなるが、そこは作るものの特性やチームメンバーの習熟度なども含めて慎重に考えた方が良いのではないだろうか。jOOQのfetchInto、フィールド名の一致を見ているのか。意図的に変えたわけじゃないけど `... as prices` とクエリで書いていて data class のフィールド名が `price` だったので値が入らなくて混乱した。どこでどう処理しているのかコード追ってみたけどこの辺かな?🤔https://t.co/HiBILezj85
— ザネリ (@so_zaneli) March 6, 2025
ScalaでできるアレをKotlinでもやりたいけど標準ライブラリでは実現できないから外部ライブラリで補おう、は黄色信号だと思っている。
なお、今後Rich Errorsという新機構が入る予定があるようで(まだ検討段階で入るかどうかは分からないのかも?)、これが入りエラーハンドリングをRich Errorsのやり方に沿うようにすればkotlin-resultも入れなくてよくなる予感がある。
今のKotlin標準のResult型がエラー情報を持っておらず表現力に乏しいためkotlin-resultの存在が助かってはいるが、Goをやるなら文句を言わず逐一
err != nil チェックを書くように、その言語の標準的なやり方になるべく沿うのが無難なはず。(
kotlin.Resultが成功時の型情報しか持っていないのはコルーチンでの使用を意図したものでエラー型を持たないのにも明確な設計思想があるような記事をどこかで見かけた気もするのだが、パッと探せなかった。一見イケてないと思われるものにも理由があったりするものだ)サーバーサイドKotlin開発は手に馴染んできたので今後も機会があればやりたいと思っていたところ、来年からまた別の会社でできる事になりそうで今から楽しみだ。
2022年9月〜現在 不定期 Go
一人目サーバーサイドエンジニアとして関わり続けている。今年になって業務委託でフルタイム稼働してくれていた方々が相次いで離任する事になり(といってもネガティブな理由ではなく、正社員として別会社で働く事になったのでフリーランスを辞める方など)、また四苦八苦しながら面談に立ち会って新しい人を探す事になった。
人生のままならなさを感じつつも、また業務委託で良い方をお迎えする事ができ、上手くワークできているように思う。私には他人の人生を預かり巻き込む胆力は無かった、これからは慎ましく身の丈に合う生き方をしようと今のような働き方を始めたつもりだったのに、なぜか採用面接に採用する側で立ち会うみたいな事をまたやる羽目になっている。ままならないな、人生。
— ザネリ (@so_zaneli) October 14, 2022
また、フルタイムではなくなったが元々長く稼働してくれていた方にも継続して副業として参画を続けてもらえる事にもなり、とりあえずは開発チームとして体制は整った。
既存プロダクトの追加機能開発や不具合修正などはフルタイムで参画しているメンバーが主に対応してくれていて、私自身はあまり手を動かしての貢献は少なくなっている。
実際何やったっけ…と振り返ってみたが、RedisからValkeyへの移行のための調査・ローカル開発のための設定準備・ダブルライトして段階的に移行するなどの細々した作業があるか。
valkey-go 使わないといけないかな、と思っていたけど、 go-redis/v9 がそのまま使えそうだな。 https://t.co/QKSVb5DLWT
— ザネリ (@so_zaneli) May 13, 2025
割と長期間ひとつのプロダクトを改修し続けて今に至り、色々とほころびが出てきているのでソフトウェア式年遷宮的に一からリライト・リプレイスしようという話が持ち上がってはいるのだが、主に私が及び腰でなかなか進んでいない。でぎだ!結局同一コンテナ上に3ノード立てて、ホストからの接続もコンテナ内ノード間のリダイレクトスロットも同じIPアドレスで繋げるようにした。だいぶ力業感あるけど、ローカル環境用に今の実装がそのまま動けばいいから一旦これでいいか…。grokzen/redis-clusterはどう解決しているんだろうな? https://t.co/RooCwMcScK
— ザネリ (@so_zaneli) May 14, 2025
一から新しく書き直すというと魅力的に聞こえはするが、現実問題なかなか難しく技術的に乗り越えないといけない事や技術面以外でも調整しないといけない事がたくさんあると身をもって知っているので…。
とはいえ、前職から付き合いの長いエンジニアリーダーには「こういう事には乗り気になる気質だと思っていたのに、日和ってるんスか?」と発破をかけられているので、
(お互いの性分を分かった上での良好な人間関係ですよ)
話は逸れるが、怖気付くという意味での「日和る」はどうやら誤用らしい。ブログを書くため単語の意味を調べなければ知らないままだっただろう。
2023年10月〜現在 週2日->週3日 Go
元々バックエンドのGraphQLサーバーを書くお手伝い程度の立ち位置だったのだが、要職の方の退任や正社員エンジニアの方の育児休暇などが重なり、動けるエンジニアが業務委託の私だけという状態になり、稼働日を1日増やして何とか留守を守るつもりで色々と担当領域を広げた一年だった。ちょうど新サービス立ち上げのタイミングでそのような状況になったため、バックエンドだけでなくインフラやフロントエンドもあまり得意でないながらも対応する事になった。
といっても実際手を動かすのは私だけだが同社の別サービスをかつて開発して経緯に詳しい人に聞きながらではあったので0->1を完全に自分一人でやり切ったと言えるほどではなかったが。
インフラは既存の別サービスのTerraformを流用して対応し、フロントも似たような感じでコピペ…とまではいかないにせよ参考となる実装があるので何とかなった。
TypeScriptやNextはそこまで苦労する事はなく、やはり私のフロントエンドの苦手意識はCSSがあまり理解できていない事だと再認識したが、この辺はAIにずいぶん助けられて以前よりは苦労が少なかった。
ここの会社はCodeRabbitを導入していたので、まずは一通り動くものを作ってPRを出し、CodeRabbitがつけるレビューコメントに対応して何とか半人前フロントエンドエンジニアでもそれなりのところまで質を上げる事はできたのではないだろうか。
他には、Auth0やStripeとの外部連携も、従来であれば私が参画時点ではすでに実装済みであったり他のフルタイム稼働の方が担当されたりするのが常であったが自分が対応する事になり、調べながら動かしながら試しながら…となかなか大変だったものの、色々と学びになり楽しい経験になった。
Auth0の設定画面、変更が激しいのかちょっと調べて出てくる情報が軒並み今と違う…!
— ザネリ (@so_zaneli) September 11, 2025
Auth0、M2Mアプリの作成時にパーミッションを付与し忘れて作成済みアプリから変更できる箇所が見つからず作成し直さないといけないかと思ったけど、「API」->「マシンツーマシンアプリケーション」から付与するパーミッションを追加できて事なきを得た。反映するには /oauth/token を取り直せばOK。😮💨
— ザネリ (@so_zaneli) September 12, 2025
stripe cli で Webhook をローカルに立てたサーバーに流せるのありがたいな。開発, 動作確認が捗る。
— ザネリ (@so_zaneli) September 12, 2025
とりあえず留守を守ることはできたか…育児休暇の方が戻ってくる直前にリリースまでこぎつけ、一旦上から下まで全部担当する事態ではなくなった。Stripeサンドボックス環境で「初回クレカ登録は成功して、次回失敗する」挙動を確認することはできないのか…?🤔失敗テスト用クレカ番号は各種用意してくれているけど、初回登録にはじかれる。
— ザネリ (@so_zaneli) September 23, 2025
来年以降は少し稼働頻度を落として継続する予定。
8月頭くらいからほぼ付きっきりだったやーつが先週無事リリースできて一安心。詳しい人に聞きながらだったりなので完全に0->1を一人でやったわけではないけど、ほぼ手を動かしたのは自分だけで上から下まで実装できたので色々勉強になった。人生で一番TypeScript(Next.js)を書いた期間かもしれない。
— ザネリ (@so_zaneli) October 21, 2025
2024年12月〜現在 週1日->週2日 Go
元々週1稼働なので大した事はできないのでは…と不安もあったが、適宜色々とタスクを振ってもらい着実にこなし、前述のお仕事先がひとつ終わった後で双方の要望が合い1日増やす事に。主にGoのバックエンド実装で、新規機能開発やちょっとした不具合修正、ミドルウェアバージョンアップによる影響調査、ライブラリバージョンアップ対応など大小様々やっている。
目新しいところではOpenTelemetry導入のためのGoバックエンド側修正あたりか。
対応しているライブラリを組み込むだけでいいかと思っていたが、意外と調べる事があったり既存実装を修正しないといけない範囲が多く、期待通り動いてくれた時の喜びもひとしお。
redisotel、ここをカスタマイズする方法はないのかな…。🤔https://t.co/hibdzDoHli
— ザネリ (@so_zaneli) November 19, 2025
otelsql.WithDisableSkipErrMeasurement(true) と otelsql.SpanOption の DisableErrSkip:true は効果が異なるのか。https://t.co/etUQtoZLmE
— ザネリ (@so_zaneli) November 19, 2025
あー、やっぱりそうだよねという記事を見つけた。しばらくハマっていたやつに光明が見えてきた。 / GinのContextを何となく使ったら危険だった https://t.co/XfKgtbaFlL
— ザネリ (@so_zaneli) November 20, 2025
ここの会社はissueでClaude Codeにメンションすると反応するようGitHub Actionsで設定されており、とある調査系タスクのためそこそこ複雑な実装を別のプログラミング言語に書き換えるよう依頼したところかなりの精度のものを出してきて驚いた。
とはいえ「書き換え前の言語のこの機能は書き換え後の言語にありません」という回答がちゃんと調べれば大嘘だったりしたので、手放しに信じるわけにはいかないが。
その他
OSS業
仕事でElasticsearch組み込みを対応したついでに気づいて出していたPR。go-elasticsearch に出していたPR、反応はあったもののしばらく放置されているかと思っていたけどマージされた。🙌 https://t.co/zRyGpMrBxD
— ザネリ (@so_zaneli) April 18, 2025
個人で開発・OSS公開していたscalikejdbc-athenaというライブラリがあるのだが、改めて調べたところこのライブラリはもう使わなくてもScalikeJDBC + Athena JDBC driver だけで機能しそう、という事に気づく。
(元々Athena JDBC driverがPrepared Statementに対応しておらずランタイムエラーを投げるので、ScalikeJDBCやその他Prepared Statement利用前提のライブラリでは使えないという事情に対応するため作ったが、現在は対応されている模様)
改めて調べたきっかけはこのリポジトリにPRをもらえたからで、使っていただいていたりPRをいただけるのはありがたいが個人的にはあまり積極的に開発する気はなくなっている。
必要でなければ依存ライブラリは少ない方が望ましいと思っておりこのライブラリの役目は終わった(使わなくても機能するようになっている)と考えているが、使ってくれている方がいるようなのでリポジトリをアーカイブするまでに思い切れておらず悩ましい。
という事はscalikejdbc-athena内で自前実装している、文字列置換をゴリ押しで頑張る処理は不要というか、むしろ余計な事をやっていそう。丸っと消してよさそうだが、下位互換を保つためにSQLNonTransientExceptionが投げられた場合のみ自前実装に切り替えるようにするか…?
— ザネリ (@so_zaneli) August 12, 2025
テックカンファレンス スポンサー
弊社合同会社ザウエルは関数型まつり2025にシルバースポンサーとして協賛させていただきました! #fp_matsurihttps://t.co/yasqEldrkV
— ザネリ (@so_zaneli) April 3, 2025
弊社合同会社ザウエルは Vue Fes Japan 2025 にブロンズスポンサーとして協賛させていただきました! #vuefeshttps://t.co/zISejkJwOD
— ザネリ (@so_zaneli) August 2, 2025
弊社合同会社ザウエルは Kotlin Fest 2025 にシルバースポンサーとして協賛させていただきました! #KotlinFesthttps://t.co/joVvN9sWpV
— ザネリ (@so_zaneli) August 21, 2025
弊社合同会社ザウエルは Go Conference 2025 にブロンズスポンサーとして協賛させていただきました! #goconhttps://t.co/PG6XY5YXF1
— ザネリ (@so_zaneli) September 6, 2025
旅行
流氷溶けて、春風吹いて。 pic.twitter.com/Dzosk6IK0b
— ザネリ (@so_zaneli) July 5, 2025
稚内、道すがら鹿に出くわしビビる。自動車の通行を待って横断していた。「ミ゛ー」とも「キュー」とも聞こえる鳴き声で誰かを呼んでいるのかと思いきや、子鹿と合流してお乳をあげていた。 pic.twitter.com/lOjokjD3rq
— ザネリ (@so_zaneli) July 6, 2025
長野県野沢温泉村、良いところだ…! pic.twitter.com/a0NwfC3qJJ
— ザネリ (@so_zaneli) July 14, 2025
人生初の長崎旅で、トルコライスの守破離を味わってきた。トルコライスなる料理の存在を知ったのはクッキングパパだった気がする。これで九州で行ったことのない県は熊本・大分・宮崎かな。 pic.twitter.com/a5zQobmP8J
— ザネリ (@so_zaneli) November 10, 2025
読書
柚月裕子『教誨』読了。親子の愛憎と田舎の閉塞感。静かで哀しい物語だった。今年読んだ小説の中では(と言っても4,5冊くらいしか読んでないけど)最も心を持っていかれた。
— ザネリ (@so_zaneli) March 23, 2025
彩藤アザミ『あわこさま―不村家奇譚―』読了。『百年の孤独』とか『ベルカ、吠えないのか?』みたいな家系図が欲しくなる。冒頭に載せるとネタバレになるし、自分で読みながら書き留めればいいだけか。ジャンルとしてはホラーミステリーになるようだけど、怖さより物悲しさが残る物語だった。
— ザネリ (@so_zaneli) April 10, 2025
阿部暁子『金環日蝕』読了。面白かった…。登場人物の一人が別の人物を評して「万華鏡みたいな」と言ったが、この物語自体が万華鏡のようだ。全編通して思い返せば癖の強い大学生部員たちが次々登場する第一章が場違いに軽妙過ぎる気もするが、二章以降の前振りだけでなくそれ自体も魅力の一つだった。
— ザネリ (@so_zaneli) May 2, 2025
辻村深月『朝が来る』読了。あらすじから"実母と養親の間で翻弄される子の運命!親子の絆!"みたいな話かと思ったけどだいぶ趣が違った。ひかりには自業自得なところもあり同情しきれないけど、それでも後半大部分を割いて描かれる境遇には胸が痛くなるし、最後に彼女にも朝が来て良かったとも思う。
— ザネリ (@so_zaneli) May 11, 2025
芦沢央『夜の道標』読了。刑事コンビの描写に物足りなさを感じたけど、定年退職した同刑事が別作品で活躍するそうなのでそちらも読んでみたい。阿久津と波留の父親とのくだりは胸がすく思いがした。
— ザネリ (@so_zaneli) May 23, 2025
ジェイムズ・P・ホーガン『星を継ぐもの』読了。面白かったものの何だか消化不良気味というか、語られていない事がたくさんある印象だったけど、続編があるのか。
— ザネリ (@so_zaneli) August 23, 2025
松下龍之介『一次元の挿し木』読了。一時期やたら本屋でプッシュされていたからまんまと乗って読んだけど、納得の面白さ。今年読んだ中では『金環日蝕』に並んで良い作品だった。登場人物の視点も時間もめまぐるしく行き来するけど、それによる読み辛さ・分かり辛さが全く無く読みやすかった。
— ザネリ (@so_zaneli) September 3, 2025
宮本輝『灯台からの響き』読了。昔『青が散る』『春の夢』を、最近も『錦繍』を読んだけど、それらに通ずるようにも全く趣きが違うようにも感じる。川三部作や流転の海シリーズも未読だけど、読めばまた違った感想を抱くだろうか。
— ザネリ (@so_zaneli) September 23, 2025
ピーター・スワンソン『そしてミランダを殺す』読了。二章の途中くらいまで息を吞む展開だったものの後半は蛇足というか、雑な結末だった気も。とはいえリリーをピカレスクヒロインとしての魅力を保ったまま終わらせない意図的な手法なのであれば、その術中に嵌った事になるか。
— ザネリ (@so_zaneli) October 10, 2025
まさきとしか『レッドクローバー』読了。三ツ矢シリーズ以外の作品は初めて読んだけど、相変わらず面白い…!伝播する怒り、連鎖する殺意。複数の時間軸と複数の人の視点を行き来しながらやがてひとつの真実へと収束するかと思いきや、そんな予感をなぎ倒して暴かれる意外な展開の数々。
— ザネリ (@so_zaneli) November 4, 2025
伊岡瞬『朽ちゆく庭』読了。じっとり嫌な気分になる好きなタイプの作品だった。真壁刑事の終盤のキャラ変(というか、素を見せた?)が印象深かったものの描写が物足りない気がしたけど、他作品にも登場するらしいのでそちらも読んでみたい。
— ザネリ (@so_zaneli) October 27, 2025
春口裕子『行方』読了。途中の「まさかそういう事なのか?」という予想は大きく外さないものの、それで拍子抜けする事もなく最後まで面白く読み切れた。序盤に出てきた小悪党の多くが相応の罰を受けていたのは胸がすく思いだが、小悪党とも言い切れない某人物は何の報いも受けなかったのだろうか…。
— ザネリ (@so_zaneli) October 18, 2025
今年読んだ中では『レッドクローバー』が圧巻の面白さだった。まさきとしかさんにはすっかりハマってしまった。伊兼源太郎『約束した街』読了。最近"イヤミス"ばかり読んでいたから、珍しく爽やかな読後感のミステリ。しかし物語の核となる謎が何だったのか、ニナの行方か、太田の転落死の真相か、はたまた…と読み進めたが捉えづらかった印象。あの結末にしては、不用意に裏社会の人間と関わり過ぎたような気も。
— ザネリ (@so_zaneli) November 23, 2025
『金環日蝕』『一次元の挿し木』『行方』も良かったな…というか、読了ポストしたものはどれも良かった。
だいたい400ページくらいの文庫なら二週間くらいかけて読んでいるか。
特段速いわけでも量を読めているわけでもないが、ゆっくりペースでも習慣づいてきたので続けていきたい。
多肉植物
えっ!!!???何年か振りにサボテンに花が咲いた!!!!!🌵🌼 pic.twitter.com/ca3ofhfQgL
— ザネリ (@so_zaneli) July 19, 2025
献血
来年も学び多き、良き年となりますように。献血70回目の記念品が届いた。 pic.twitter.com/8f1DLy4I1b
— ザネリ (@so_zaneli) June 6, 2025