結婚しました

このたび、2022年1月11日に福岡市中央区役所に婚姻届を提出し、結婚しました。

コロナの状況下で出会い、お付き合いしてきて、制限もある中、工夫して2人で楽しい時間を過ごしてきました。
お互い波長が合い、何でも楽しめるタイプで、うまい具合に特徴を補いあえており、恋人でありながら深い親友でもあるような関係を築けてきました。良く2人で言うのが、出会うずっと前から知り合っていたような気がするよね、ということです。

プロポーズは糸島市の2人の思い出のレストランで食事したあと、桜井二見ヶ浦の夫婦岩の駐車場の車中で、福山雅治の『家族になろうよ』をかけながら行いました。

桜井二見ヶ浦夫婦岩を背景に結婚指輪をはめた2人の左手

長期の引きこもりという暗黒時代を過ごした自分が、こうやって人生を共にする相手を得られたのは、支えてくれた家族や、行くところ行くところで世話をしてくださる方々に恵まれたおかげです。
これがスタートではありますが、まずは関わってくださった全ての方々に深く感謝を申し上げます。

いや〜自分が結婚なんて、不思議なものですね。

2022年抱負 - 数学と機械学習、楽器をやっていく

紅白の藤井風さん、とても良かったなーと思いつつ、恒例の年初抱負を書いてみる。

技術

今年は私生活が忙しくなりそうなので、プライベートの時間でやる技術は思い切って絞ってみる。

新規にやること

数学

プログラマーとして社会人になったけど高校数学を1から独学しているを書いた時に勉強して以来、約4年半ぶりのチャレンジ。前回は長岡の教科書2+Bを終えたところで止まってしまったので、最低限高校数学までは履修したい。海外の教材も選択肢に入れて勉強していきたい。

機械学習

何のために数学を学ぶかというとこれ。
仕事を通じてある程度Webアプリケーション周辺のプログラミングは慣れてきた感があって(もちろんまだまだな部分がとても多いのだけど)、何か新しいことにチャレンジしてみたいと思ったというのが動機。
その時に思いついた技術として、ブロックチェーン、XR、機械学習があった。
ブロックチェーンはまだ自分の頭では本当に実用的なのか判断が難しく様子を見たいと思い、XRはまずコンシューマーとして遊んでみたいと思った。
最後に残った機械学習は既に十分に実用されていて、これからも必要になる技術だろうと見たのでやってみることにした。 Kaggleみたいなコンテストがあり、ゲーム的に学ぶこともできそうと思ったのも理由。極めるのが難しそうなのも難しい物好きな自分には合っていそう。
これをどう仕事に活かすかとかは考えてないが、知的好奇心頼りに進めていくつもりだ。

引き続き

Go

去年は自分の中でGoの年と言って良かったと思う。引き続き業界全体としても、自分の周りでも、主要な言語として使われていくであろうから、1.18のキャッチアップや並行処理の勉強などやっていこうと思う。

その他

あとは業務効率化をミッションの1つにしているチームに所属していることもあり、Slackの新機能がかなり気になっているため、そこに使用される技術であるTypeScriptとDenoも追っていきたいと思っている。

趣味

楽器

楽器をやっていきたい。紅白の藤井風さんを観て改めて思った。
色々やっていきたいが、昨年末のサカナクションのライブで間近に見た草刈愛美さんがかっこよかったので、まずはベースにしようと思っている。
去年ストラトを思い切って買ったが眠らせてしまっているので、ギターもやっていきたいところ。ギター1本で人前で披露できるのはとても良いので、弾き語りできるようにもなりたい。となると高い声が苦手なのでボイトレも必要そう。
コロナの状況しだいで教室にも通ってみたいと思っている。何かの教室に通うという体験はしばらくやってないので良いのではという期待から。島村楽器だと年1でホールでの発表の機会があるとのことなので気になっている。

XR

技術のところでも触れたが、XRの可能性を探ってくために色々触れてみたい。Quest 2は昨年末に買った。まずはValve Indexを買ったのにすぐ売っ払って未クリアのHalf-Life: Alyxをクリアしたい。

まとめ

こんな感じだろうか。
やることは最小限に、あまり根を詰めずに余裕のある豊かな日々を送れたらと思っている。

いい年にしていくぞ。

2021年振り返り

恒例の年の振り返りをする。なお2016年から続けているようだ。けっこう続いている。

抱負の振り返りから。
2021年抱負に書いたことを振り返っていく。

技術

  • TypeScript
  • React
  • Next.js
  • Docker / Kubernetes
  • Go (余裕あったら)

結果的には余裕あったらとしていたGoを一番書いた年だった。業務で主に書いた言語だったし、個人的にも初めて自身のOSSプロダクトをリリースしたりした。
DockerとKubernetesについては同僚のakht氏とちょろっとやったが中途半端に終わった。
TypeScriptはほとんど触らなかった。ReactやNext.jsといったフロントエンド技術にも触れることはほとんどなかった。

仕事

  • 等級上げる

半期ごとの評価なのだけど、上半期に上げることは叶わず、現在下半期の評価待ちとなっている。

色々

  • 毎月1記事のペースでブログを書く

数えたらこの記事を含めずに丁度12記事書いていた。ということで達成。

  • お気に入りのキーボードを見つける

REALFORCEなど試したものの、家の机のスペースの関係などでMacBookの内蔵キーボードに戻ってしまった。M1になってからはバタフライではなくなったことで余計に気にならなくなった。
ただ分離キーボードの方が肩に良いということを聞くので、まだ探すのを止めたわけではない。けど沼っぽくて足を踏み入れないでおこうという気持ちが強い。

  • ギターで弾ける曲を5曲増やす

他にもやることがたくさんある中、中途半端にできない性格のせいで楽器は全くやらないと決めてしまった。ただ音楽ってそういうものじゃ無い気もするので、気が向いた時にジャガジャガやるのもありかと思ったりして、来年は再開しようと思っている。

  • お金周りの勉強(貯金以外の資産運用の手段を増やす)

これはちょこちょこ始めている。手始めにふるさと納税はやった。忙しくて手を出せなかったけど、来年はつみたてNISAを始めてみようかと思っているところ。

  • 体重を理想体重まで減らす

4月ごろまで順調に減っていたのだが、5月ごろから順調に増えてプラマイゼロになってしまった。来年はちゃんと運動して痩せたい。

  • 健康に気をつける

人生で初めて受けた人間ドックの結果はあまり良くなかった。ここも来年はもう少し頑張る。

  • 周りの人を大事にする

これは仕事、私生活含めてけっこうできたのではと思っている。そもそも交友関係の少ない方だし、少ない人を深く大事にする方が自分には合っているようだ。

まとめとして、

前年はインプットの年にしたので今年はアウトプットやっていく。

と書いていたのだが、Fukuoka.goでは登壇できたし、OSSプロダクトを出したりして、十分アウトプットをやっていけたのではと思っている。

あとは個人ブログに移行したりISUCONに出たりが大きなイベントだったように思う。

ここでは詳しく書けないが、業務と私生活の両方とも精一杯やって、個人的には人生で一番頑張ったし、一番充実していた1年だったように思う。大変なご時世ではあるものの、その中で工夫して楽しく過ごすことができた。丑年36歳、年男Man of the yearとして十分な1年を送ることができた。

こうやって充実した日々を過ごせたのも関わってくださった周りの方々のおかげである。
いつもありがとうございます。今年もお世話になりました。良いお年を。

初めてのGo製CLIツール作成、初めてのOSS公開に込められた物語

この記事はGMOペパボエンジニア Advent Calendar 2021の15日目の記事です。

昨日はToshifumi Tsutsumiさんの入社から一年、ペパボはどうですか?に答えるでした。
ペパボにいるとインプット、アウトプットが出来てる方々の集まりで本当に刺激的ですよね。…そして、評価資料がんばりましょう。

さて、今回、記事にするのは掲題の2つの「初めて」についてと、作成したGo製CLIツールの紹介です。
2つの「初めて」とは、1つ目はGo製CLIツールを自分で作成したこと、2つ目はそれをOSSとして公開したことです。

What is takolabel

まず、そのGo製CLIツールについて紹介します。

tnagatomi/takolabel
https://github.com/tnagatomi/takolabel

名前はtakolabelと言って、GitHubのマスコットであるOctocatがタコとネコの合体であることから(割と安易に)takoを、ラベルを操作するツールなのでlabelを取って、takolabelと名付けました。
後になって英語圏の人に伝わりにくいかもと少し後悔していたりもしますが、Kubernetesなんて名前のソフトウェアがあるぐらいなので良いかなと思ったりしています。

このツールが何をやってくれるか短く言うと、「複数のGitHubリポジトリに渡ってのラベル操作」です。
例えば、A、B、Cというリポジトリがあって、X、Y、Zというラベルをそれぞれのリポジトリに一括で作成したい、といった時にそれを実現してくれるというものです。YAMLリポジトリとラベルを指定して操作します。GitHub Enterprise Serverにも対応しています。

ここでは、なぜそのようなツールが必要になったかについて説明します。

ツールが生まれたきっかけ

このツールが生まれたきっかけとしては、私が所属しているGMOペパボ ホスティング事業部 ISR (Internal System Reliability) チームにて、運用業務のコスト可視化というタスクがありました。
前提として、GMOペパボ ホスティング事業部では全パートナーが割り当てたタスクをGitHub Issues上で議論や過程を記録しながら進行させるのが基本になっています。そういうことから、コストを可視化するためにはIssue上で分類や消費時間を記録すれば計測できるのではないかとチームで話し合われました。
その結果、サービスや用途ごとに異なる複数のリポジトリGitHub Issuesに計測用の分類、消費時間を表すラベルを貼った上で、Google Sheetsにエクスポート、それをさらにGoogle Data Studioに取り込みレポートを作成するという仕組みを実現しました(こちらについては別に改めて紹介できたらなと思っています)。
その過程の、GitHub Issuesにラベルを貼るという作業を手動で行うのは大変なので、それを自動化するために生まれたものです。
最終的には、思った通りにラベルを複数のリポジトリに一括で作成することができ、ツールとしての役目を無事果たすことができました。

Goについて

なぜこのツールにGoを選んだかということについては色々とありますが、ホスティング事業部として今後バックエンドを中心に採用していく言語であること、実行ファイルがシングルバイナリであることからCLIツールとして適していること、個人的に学んでみたい言語のリストに入っていたこと、が挙げられます。

結果として、ツールの作成を通じてDXとして非常に満足のいくものがありました。
まずは言語の売りである簡潔性がとにかく素晴らしいです。学習にかかる時間がかなり少なかったですし、覚えることが少ない分、コードも読みやすく仕上げることができます。
良く言及されるエラーハンドリングも個人的には何も苦ではない感じです。
IDEとの親和性も高く、ツールチェインについてもシンプルで、言語としての完成度の高さを嫌というほど実感しています。

そういうわけで、これから自分で書いていくプログラムで採用していくことも増えていくだろうなと思っています。CLIツール以外でも使ってみたいですね。
色んな言語を使ったり学んできて、使う言語にこだわりのない方なのですが、この言語については惚れてしまいました。

あとはGoルーチンを使った並行処理の強みについてはまだ活かせていないので、その辺りも勉強していきたいと思っています。

OSSとして

2つ目の初であるOSSとしてですが、こちらは主に2人の会社の先輩に助力をいただきました。

まずは、Fukuoka.go#17での発表でも触れましたが、CIフレンドリーなDBドキュメントツールであるtblsを代表プロダクトに持つk1lowに、環境変数命名や設定ファイルの書き方といった点を中心に、様々なアドバイスをいただけました。このプロダクトを社内Slackで公開した時に、「え、めちゃいい!」と言っていただけたこと、非常に嬉しかったです。

次に、チームの先輩である、お手軽にTLS証明書の情報を引けるcertを作ったgenkiroidには設計のアドバイスをいただきました。現在のコードの状態を見て、自分ならこうするという例を提示していただき、責務の分離や構造体の定義、関数とメソッドの使い分けといったことを教えていただきました。仕事上でもいつも的確な意見をいただけていて、私の中でロールモデルな存在です。

お2人とも貴重なプライベートの時間を使ってプロダクトを見ていただいた上で助言をいただけて、最高の福利厚生だなと思っています。いや〜ほんとありがたいです。この場を借りてお礼させていただきます。

takolabelのこれから

そんなtakolabelですが、現在のところ必要ドリブンで、ラベルの作成、削除、空にする、という3つの操作ができるにとどまっています。これからも操作を拡張したり、使いやすくしたり、リファクタリングしていけたらと思っています。

もちろんPull Requestsもお待ちしております!

まとめ

この記事を通じて、1つの小さなプロダクトにも、物語があるのだということを感じ取っていただけたらなと思います。
そして、Goで書くことも、自身のOSSを持つことも、自分次第でなんとでもなることだと分かり、挑戦して良かったなと思っています。こうしてAdvent Calendarのネタにもなっていることですしね。

Who's next?

さて、明日のGMOペパボエンジニア Advent Calendar 2021の16日目の担当はAkihito Ikedaです。
彼はISUCON11でISUCONに初参加した時の盟友です。何を書いてくれるんでしょうね。楽しみです。

2021年冬季休暇にやりたいこととか近況とか

ここのところ仕事もプライベートも忙しくてなかなかプライベートな時間でスキルアップをできていない。ただ1年中突っ走る生活もしたくないので、プライベートなスキルアップは余裕のある時でいいかなと思っている。仕事を通じて十分スキルアップさせてもらっているということもあり。
人生で何を大事にするかなんて問いも浮かんだりしている。その辺については前にも少し書いた

それはさておき、少し気が早いが冬季休暇にやりたいことをNotionページに書き出していっている。
まずやりたいこととしてはGatsby Starter Blogほぼデフォルトのこのブログをもっと充実させたいのが一つ。そして、開発しているGo製OSS takolabelを改善すること。あとは密かに狙っているghへのコントリビュート。そして遊びでは今のMicrosoftが出してRTS界の重鎮Relicが開発したということで興味を持って購入したAge of Empires IVをプレイすること。
休みって毎回あっという間に終わってやりたいことの20%もできずに終わるのだけど、無為に過ごすよりはある程度目標を立てておいた方が有意義に過ごせるだろうなと。

2021年もカウントダウンが始まってきた。このままいい年にしたいものである。

Vimを始めとして環境を見直してみた

僕は開発環境にはJetBrains IDEsを使って、その他のテキスト編集にはVimを使ったりVisual Studio Codeを使ったりといったことをやっているのだけど、ふと使う道具を少なくしようとVisual Studio Codeは使わずに、がっつりした開発以外のテキスト編集やスクリプト作成などにはVimを使おうと思い立った。高機能なVisual Studio Codeを単なるテキストエディターとしか使えておらず、Vimはカスタマイズや操作を組み立てるのが楽しかったり、ターミナルから抜け出さなくて良いというのが理由。

それでまずは6年前に読んだ実践Vim(の英語改訂版)を読み返した。プラグインの機能はほとんど使用せずに様々な操作が可能なことを教えてくれるこの本はVim wayを知る上で本当にいい本だと思う。新たな学びもあったけど、ふとした時に出てくる自信のない操作も多い(マクロとか)。

あとはVimを使った開発の動画を観たりした。良かったのはこの2本: tmuxとvimによる開発作業フロー (動画) | 週休7日で働きたい【解説】開発ライブ実況 #1 (Vim / Go) 編 by メルペイ Architect チーム Backend エンジニア #mercari_codecast | メルカリエンジニアリング。特にメルカリの方のやつは作業が速すぎてRTSのプロゲーマーを観ているようだった。

んでそのままの勢いに実践Vimと同じ著者が書いたVim 8とNeovimについてのModern Vimを買って読んだ。といっても "Craft Your Development Environment" と副題がついているように、開発環境向けの機能やプラグインの紹介が多く、僕の利用目的とは合わない感じだったのでそういうプラグインもあるんだな、Neovimにはそういう機能があるのねー、程度にざっと読んだ。

動画を観た影響もあり、Vimで開発もやってしまったらかっこいいなーと思いつつ、カスタマイズや操作の修練も行き過ぎるとけっこうダルいなと思ってしまったし、JetBrainsのAll Products Packにお金を納めたばかりだったので一本化はやめることにした。

そして出来上がったVimの環境なのだけど、とりあえずNeovimにcoc.nvimを入れてLSPによる恩恵に預かることにはしたのだけど、コンフィグやプラグインはかなりミニマルな構成にした。昔入れたプラグインキーバインドも使ってないものはごっそり捨てた(dotfilesはこちら)。

あとはtmuxについてtmux 2を読み返したけどそんなに発見が無くて十分使いこなせてる感を感じたあと、Tao of tmuxをざっと読んだり、fzfを使った便利なコマンド無いかなーと探したり(結局使いたいと思うものは増えなかった)といったことをやっていた。

とりあえずVimの環境はスタートラインに立てたので、あとは必要に応じてカスタマイズしたり習熟していきたいと思う。というこの記事をNeovimで書いたのであった。

ISUCON11でISUCONに初参加した

ISUCON11に同僚の @akht_ikd と2人チーム「team”渇き”」として出場した。
結果としては58450点の58位で予選落ちだった。

詳細なレポートは @akht_ikd がブログに書いてくれたので個人としての感想などを。

まず、過去問などをやったり他の人がやったことを調べるにつれて、自分の思っていた以上に幅広く深い知識が要求されるコンテストだということが明らかになっていき、まだまだ知ることが無数にあるのだなということを痛感した。
また、近年は学生で上位に入る方々も多く、世の中には本当に優秀な人々がいるのだなぁということも知れた。

チームの面でいうと、ISUCONに出てみないかと声をかけたところ、即座にのってくれた @akht_ikd には本当に感謝している。
スクリプトを作ってくれたり、やることリストをまとめてくれたり、競技中の改善にしろ、かなり頼りっきりだった。今回楽しめるレベルで参加できたのは彼によるところが非常に大きい。本当にありがとうございます。

大会前は過去問をビデオ通話を繋ぎながら一日かけて一緒に解いたりして、部活みたいな面白さがあって良かった。
まだまだ自分自身のスキルは足りないが、こうやって一緒に行動を共にできる仲間がいることに感謝。

大会が終わった後の大会公式Discordでの感想戦の話なども分からないことが多かった。個人としては自分の足りなさをさらに実感する初参加となった。チームメイトに頼りっきりになってしまったことも反省している。
分からないことがドサッと来ると頭や手が動かなくなる癖があるので、物事を分解して各個撃破できるスキルをもっと身につけなければと思う。

渇きが増した大会だった。実力を今よりもっとつけて、来年もまた参加したい。