何でも屋エンジニアのブログ

ソフトウェア関連技術、コミュニティ、日々の雑貨

dotfiles を chezmoi を使って管理するようにした

今までMitamaeで管理していたが、例えば Ruby のインストールする場合 itamae の plugin を使うと便利なのだが依存関係が多くなり、dotfiles 管理・セットアップのためにはちょっと複雑すぎる印象があった。実際、Itamae を理解し使いこなすというより Ruby の中でシェルコマンドをたたいてあれこれする集合体になってしまっていた。それなら Mitamae である必要はないだろうと思い、かつ Windows でも使えるものが欲しいなと思い chezmoi を選んだ。

@mattn_jp さんの投稿で以下の比較表を知ったおかげできちんと比較し選べた。

www.chezmoi.io

シュッと WSL2 Ubuntu のセットアップスクリプトや設定ファイル群は移行して動くようにしたので、気が向いたときに Windows の方も育てていく。ちゃんと試していないが、会社用・個人用のような分岐もシュッとできるようなので便利そうだ。

RubyKaigi 2024に参加してきた

昨年に引き続き、所属しているGMOペパボ株式会社の参加支援を受け参加しました。(去年に引き続き本当にありがとうございます。)

セッション

特に印象に残ったセッションについて書きます。

Writing Weird Code

rubykaigi.org

@tompng さんによる1日目のキーノート。初日のキーノートがMatzではないのは初とのことでしたが、本当に素晴らしかったです。発表内容の技術分野については度肝を抜かれるというか、「???」「すげー」「???」「すげー!おー!」みたいな繰り返しで、こんな書き方あるのかと思いつつ、理解できない部分も多かったのですが面白かったです。その中で沖縄にまつわる内容・その後のセッションの内容なども盛り込み「RubyKaigi 2024絶対おもしろいぞ!わくわくする!」と思える発表でした。例えばフィヨルドブートキャンプさんからの参加者などビギナーの方も一定数いたかと思いますが、どのようなレベルの人でもここから始まるRubyKaigi 2024がすごく楽しみになるような発表だったと思います。

The depths of profiling Ruby

rubykaigi.org

@oshoyu さんによるGitHub - osyoyu/pf2: A sampling-based profiler for Rubyに関する発表です。C拡張ライブラリによる呼び出しのプロファイルもできるようになったおかげでHash#[]でのボトルネックを発見した話がとても印象的でした。他のprofilerとの比較を見る限り、実用性が高く今後が楽しみになる発表でした。

オブザーバビリティの観点で、OpenTelemetryで使えるとより細かい分析が可能になり、可用性向上・パフォーマンス向上への打ち手が打ちやすくなるだろうと思いました。どうやらOpenTelemetryでのprofilingの標準化の試みも進んでいるようなので、将来的にOTELで使えるようになると嬉しいなと思いました。

github.com

An adventure of Happy Eyeballs

rubykaigi.org

@coe401_さんによるRubyのsocketライブラリの改善に関する発表です。Issueについて「そんな実装になっていたんだ、たししかにのびしろがある」という印象を抱きました。その解決策としてRFCに規定されているアルゴリズムを実装するという方法をとっていて、素晴らしいなぁと思いました。

ところで、この課題はどのように発見しどのように RFC 8305 - Happy Eyeballs Version 2: Better Connectivity Using Concurrency にたどり着いたのか気になりました。

発表内でも名前が出ていた松下氏が2020年に同様の内容でRubyアソシエーション開発助成に採択されているので、この系譜を継ぎ進めた形なのでしょうか。

www.ruby.or.jp

どちらにしろ素晴らしいことで、Rubyアソシエーションの開発助成についてきちんとウォッチしておくべきだなぁと意識させられました。

Finding Memory Leaks in the Ruby Ecosystem

rubykaigi.org

Rubyは停止時にメモリ開放しないので、Valgrindでメモリリークを検知するには偽陽性が多すぎる、ruby_memcheck ではheuristics approachで偽陽性を検出しているので根本解決にならず、停止時にメモリ開放をするように実装しその機能を利用するオプションをつけたという話です。

偉業!新しいRubyを使い恩恵を受けたくなるようなものでした。Valgrindも使ったことないので触って活用したいなと思える発表でした。

An mruby for WebAssembly

rubykaigi.org

もともと興味があった発表の一つで、多少予習をして臨みました。Day1のOfficial Partyの移動の際、たまたまうづらさんとお話できて発表について説明を聞けてとてもありがたかったです。そのときの話と発表を聞いてめちゃくちゃ夢があるという印象を受けましたが、その時点では正直細かい部分などあまり内容を理解できませんでした。

この記事を書きながら改めてスライドや以下を始めとするうづらさんのブログ記事などを読みChatGPTに色々聞きながら復習していたら、そもそもmrubyにおけるRiteや.wasmのバイナリについての仕様についてわかってきて、なるほど!という感じだった。バイナリ楽しいですね。(ほんとに?)

udzura.hatenablog.jp

udzura.hatenablog.jp

udzura.hatenablog.jp

wasmバイナリにどんなセクションがあるか、とか、使い方とは、みたいな話は以下の本をサクッと読んでください。

www.oreilly.co.jp

とのことで、興味が出てきたので読んでみようと思った。

LT

rubykaigi.org

「Drive Your Code: Building an RC Car by Writing Only Ruby」ではラジコンを作りたくなり、「The Journey of rubocop-daemon into RuboCop」ではは Rubocop Daemon 導入の裏話的なものを聞けておもしろかったです。movさん主催のAfter Partyでは@forteさんとこれについて話せたのもよかったです。

Speeding up Instance Variables with Red-Black Trees

平衡二分木の一種である赤黒木を利用して高速化を行う話です。アルゴリズムの重要性やパワーを感じる発表でした。アルゴリズムやデータ構造、コンピューターサイエンスの基礎的な部分の知識の不足がボトルネックになっていると感じる場面が多く、腰を据えてやらねばと思っていた自分にはタイムリーな発表でした。

感想やセッション以外のできごと

コミュニティ

自分はStep-to-Rails-Expert.rbというRailsのコミュニティを立ち上げ2016年から5年ほどやっていました。(今は大倉さんが引き継いで開催してくださっている。)

そこで出会ったみなさんとかなり久々に再開できてStep-to-Rails-Expert.rbの同窓会みたいになったのが最高でした。当時初心者だった方はエンジニアとして活躍されていて、当時中・上級者だったみなさんは要職についてらっしゃって、年をとるはずだ...としみじみ。たくさん嬉しいことあったけど、参加者の方から「当時の中級者の集まる場所としてとても良い場所で、自分もとても楽しんでいた」と言ってもらえたのが特にうれしかったです。

また、当時初心者だったころ、スタッフしてくださっていた方に

のようなことを言ってもらえて「やっていてよかったなぁ」とすごくうれしかった。新型コロナウィルスの影響でリモート開催を余儀なくされ、徐々にモチベーションがなくなり開催しなくなってしまい、StepRailsExが自分の中で良い感じに終わった感じや区切りがついた感じがなかったのだけど、何年か経ちこんな形で報われるとは思ってなくてうるっときました。

あっきーさん、触れてくれてありがとうございます! note.com

僕も参加し再開したいなと思っていたので、今年何かしら動かしていこう。

Rasberry Pi PicoでPicoRubyを試した

やんちゃさんにRasberry Pi Picoを頂きました。hasumiさんの発表は聞けていないんだけど、ずっと触ってみたいなと思っていました。やんちゃさんが配っているのは知っていたがもっと適切な人がいるだろうと思っていたのでもらうつもりはありませんでしたが、Day2の夜に話す機会があり一枚余っているとのことで頂きました。会期中に試せず申し訳なかったのですが、この機会がなければ触ることなかったと思うので本当に感謝しています。帰ってすぐRasberry pi pico と picoruby でLチカさせる - ebihara99999 をやりました。面白いので何か作ろうと思います。

懇親会

そのきっかけとなった 株式会社万葉さんと 合同会社春秋さんとの懇親会もとても楽しめました。普段お仕事のお礼や挨拶、沖縄開催本当に楽しいですーという話、テックの話、エンジニアリングマネジメントの話などいろいろ話せてとても有意義な時間でした

その他各社との交流や社内メンバーとの懇親も時間をとってゆっくりできて、RubyKaigiならではだなぁと思いました。色々なトピック話せてとても面白かったです。特にmovさん主催のAfter Partyではたくさんの方と交流ができました。お話したみなさん・主催して頂いたmovさん、ありがとうございました。

KaigiEffect

学ぶこと・アウトプットすること・コードを書くことというのをもう少し気楽にやりたいなと思っていたところ、会期前に発見したしおいさんの GitHub - shioimm/til: Today I learned. がすごくいいなと思っていたので(どこかの文化かな)作り、 総合目次 - 苦しんで覚えるC言語 をやっている。

Rubyソースコードをはじめ、ミドルウェアなどもC言語で実装されているもの多く、ソースコードリーディングするときに困っていたのでやっている。「わからない」と思うとき、それはC言語が分からないということではないだろうことは自覚しているが、それはそれとしてやっておいたほうが良いと思うので。また、前述したアルゴリズムの話で、回答例・解説などがC++で実装されていることも多く、そこでもC系列の言語の記法に不慣れで読みづらかったりしてあきらめてしまう経験があったので、その意味でもよいかなと思っている。

また、雑に何か書くのやはりScrapbox(現Helpfeel Cosense)が良いなと思いちゃんと使うことにした。

あとmrubyは会期中にビルドして使えるようにしておいたのと上述のLチカ周りも取り組んだ。

これから取り組むネタや課題を見つけるというのが大きなテーマだったが、いろいろ持ち帰れたので復習したり色々試しつつ、何かしらに取り組んでいきたい。

RubyKaigi 2023に参加した

所属しているGMOペパボ株式会社の支援でRubyKaigi 2023に初参加してきた。

コロナ禍や子供が産まれたタイミングもありここ数年あまりコミュニティに参加できておらず、色々な人に「久しぶりです」が言えたのがとてもよかった。同時に「初めまして」や「xxx使ってます/見てます、いつもありがとうございます」ができて本当に良かった。#rubyfriends の取り組みは素晴らしく、多くのコミュニケーションのきっかけになった。みんなの楽しそうな写真を見ることの栄養もあり、RubyKaigiが終わってから何度も見返している。

OSS Gateからスタートし、OSSの中でも特に関わることの多いRubyGemsに対しては自分事と捉えcontributionや自作をしていたが、元となるRuby本体は自分になじみがないC言語MRIはだけど)で書かれているからなのか、言語自体はさすがに手が出せないと考えていたからか、一歩引いた感じがあり壁があった。悪く言えば他の物事に比べ他人事だったように思う。それが実際に関わっている人がしゃべっているのを聞いて、何か感じるところがあった。Ruby自体をより身近に感じ、深ぼったり積極的に関わりたいという気持ちが湧いてきた。言語化できないけどjune29さん がどこかで言っていた「関係性が立体的になる」というのに近い部分があると思う。もちろん、発表内容が素晴らしいという要素は多分にありスピーカーのみなさんのおかげであるが、こう考えるに至る道筋にオンサイトでのRubyKaigi 2023への参加という要素は欠かすことのできない大きな要素であろう。

https://github.com/ebihara99999/code_keeper を作ったりいわゆるカスタムコップを作ったりする中でASTに触ることが増えてきて、その流れでParserにも興味が出て来ていて、今回の大Parser時代のRubyKaigiのコンテンツは特に楽しめた。

基礎知識が足りず The future vision of Ruby Parser - RubyKaigi 2023 を聞いても分からないことが多く、一日目の夜調べたりソース読んでのびしろ…となっていた。次の日、しおいさんの発表 Implementing "++" operator, stepping into parse.y - RubyKaigi 2023 で色々とっかかりや理解ができ、おおおお!となった。もちろんそれでも分からないことがいくつかあったので、スライドとparse.yと実行結果を見比べながら、その日の夜もうなっていた。ところで、金子さんの発表、分からないなりにも楽しく感じたり興味を惹かれるところが多く、非常に感銘を受けた。

RedDataToolsの話やRuby + ADBC - A single API between Ruby and DBs - RubyKaigi 2023 のポスグレのプラグイン開発話など、他にも気になることがあったにも関わらず、ちゃんと質問できるまでの理解度をあげて聞いて回れなかったのは残念だった。予習をより行う必要があったなと反省した。幸い、RedDataToolsの方はYoutubeで開発の様子を公開してくださっているので、そちらを見ていくことにする。

www.youtube.com

こちらに記載していない発表もどれも学びが多く、本当に素晴らしかったことを付言させてください。本当にありがとうございます。

KaigiEffect

既に書いた通り、「Ruby自体をより身近に感じ、深ぼったり積極的に関わりたいという気持ちが湧いてきた」。これを感じられたのは非常に大事な経験だったと考えている。

同様に既出だが、RedDataToolsへの興味・関心が深まったのでキャッチアップを行っている。

さらに、Parser周りに興味が出てきたので、キャッチアップしている。取り急ぎRubyの仕組みを購入し読んでいるところだ。(分かりやすく発表を聞く前に読んだりしておけば良かった...と少し後悔しているが、それもKaigiEffectということで。)

さいごに、コミュニティ関連で。Step-to-Rails-Expert.rb - connpass というコミュニティを立ち上げ主催していたが、コロナ禍以降リモート開催となり、最近は大倉さんが主催を引き継いで運営・参加を行っていなかった。「そろそろオンサイトの開催もしたいなぁ」とぼんやりと考えていたが、RubyKaigi 2023に参加したことによって「やりたい!やるぞ!」に変わった。コミュニティについて松田さんともお話でき、よりその気持ちが強まった。

帰ってから感じたこと

ぱんさんjoker1007さんの参加ブログを読み、とても共感した。

「誰かをロールモデルにする」という考え方自体が、その対象の人のことをめちゃくちゃ好きで尊敬していても、誰かをロールモデルにすることで誰かと自分を常に比べることになると、私はメンタルを病んでしまうので、難しいことだなと思ったりしているのでした。つまり言いたいのは、誰かをロールモデルにしていてもいなくても、登壇者を目指していてもいなくても、Rubyを好きでいたらRubyKaigiを楽しめるし、Rubyコミュニティにいていいのだ、と、当たり前ながら思ったということでした。

nappan23.hatenadiary.org

気にせず自分の人生のための活動をすること、自分なりのやり方でコミュニティに恩を返すのも大事なことなのだと思います

joker1007.hatenablog.com

自分自身あまり能力が高い方ではないし、絶賛子育て中で時間も多くは取れない中、帰った後受けた刺激を少し持て余している感覚があったが、上の記事を読み少し気持ちが楽になった。ちゃんと「We Code」を続けていくことを大事にしていこう、ライフステージの変化・社内でのロールの変化もあり続けることはそこまで簡単ではないのだけれど、Rubyを書くのが楽しい・知識が広がるのが楽しいという気持ちやOSSやコミュニティへの関わりが僕のプログラマーとしての原点であるのだから、それは何であれずっと大切にしていこうと思った。今回の体験は、おそらく何十年経っても記憶に残り続けるものだと思う。そんな場に参加できたことを非常に嬉しく感じるとともに、場を作ってくれたみなさま・参加を支援してくれた会社・参加を後押ししてくれた家族に強く感謝している。

2023年3月のふりかえり

仕事の話

近いタイミングで入社する人が多かったので、オンボーディングメンバーのチームを作って色々進めるようにしていた。(さらにそのチームには初めてエンジニアとして働く人含めジュニアが多く在籍している。)そのオンボーディングチームを直接マネジメントしていて、その仕事の中でも特に会社の文化やソフトウェアエンジニアとして働く上で必要な心構えなどをインストールしていくことを重要視し可能な限り丁寧に進めていたがそれ一段落した。 チーム全員とても良い感じに振る舞ってくれるように見えていて頼もしい。もちろん細かい仕事のやり方などはこれから伝えるべきこともたくさんあるだろうが、それは追々必要になったタイミングで伝えるでも良いし、チームメンバーに任せることもできる。しかし根本の文化や理念などは、最初にしっかり伝え浸透させていくべきで重要な仕事であると位置付けていたのでとてもほっとしている。

子供の話

おしゃべりや言葉を理解できる範囲が広くなった。「はい」のような返事も「あーぃ」のような発音が「はいっ」と言えるようになったし、少し長めの語句もどうぞを「どうじょー」やアンパンマンを「ぱんまん」のように以前と比べてはっきりと表現できるようになった。寝言でも言葉を発するようになったので、習熟度が高まっているのだろう。たまにあははと笑うことがあり、聞くたびにこちらの顔も自然とほころぶ。 言葉が出るようになったおかげか感情表現の上達し表情が豊かになってきた。楽しいとき、つまらないとき、寂しいときなど表情からも伺えるようになってきた。

ところで、ベビーカーやショッピングカートを押したがるので、妻がドールバギーを買ってあげたところ、とても喜びぬいぐるみやお気に入りのおもちゃをのせて四六時中ひいていて、とてもかわいい。

体が強くなったのか平日に体調を崩すことはだいぶ減ったが、その分土日に調子を崩すことが増えた。平日登園できるのは本当にありがたいが、これはこれで続くとお出かけして気晴らしすることができず辛い面もある。また、相変わらず子供から移る風邪は強烈で、毎週(何なら週2で)風邪をもらってきては移されているので、ずっと体調は悪いし気晴らしむできないし辛いのであるがこれは気合で乗り切るしかない。 新年度のお知らせやクラス替えのタイミングで、入園から一年経ったのかぁと感慨深い気持ちや、担任変わったり新しく入るお友達と馴染めるかなぁなど、心配半分期待半分でワクワクしている。年下の子の面倒見が良いらしいので、年下の子たちが増え色々なコミュニケーションを楽しんでくれるといいな。

委譲することが苦手

第N次無理だ仕事まわらん期をやっている。これ自体は委譲せざるを得ない状況に自分を追い込むため、そして視座を上げるために色々な課題を自分に課して意図的に追い込んでいるので別にネガティブな気持ちはないのだがさすがに体力的な辛さを感じることも増えてきた。

昨日あるタスクを誰にやってもらうかについてマネージャーと話してて、委譲したいと思っているけど踏み切れずタスクの性質的に自分たちで頑張るのも選択肢の一つにあったこともありどうしますかねぇなんて話をしていた。

その日の夜、子供から風邪をもらい体調がきつい中帰路につき、一日の体力の限界を迎えた頃にあのタスクはお願いしよう…という気持ちに自然となった。

その思考の流れとしては単にさすがに疲れた…さすがにタスクが溢れるしもっと注力したいことがあるとなったからなんだけど、なんでここまでの状態にならないとそういう意思決定が自分はできないんだろうと不思議に思っていた。

一つには、人にものを頼むのが苦手という自分の性格がある。別に自分に依頼されるのは嫌じゃないのに不思議である。

これについては、以前自分でもできる仕事を委譲するのが苦手と1on1で話した際、上司にある課題を言い渡されるときに信頼や期待をされているんだろうと嬉しくなることが多いし、僕に頼られることが嬉しいと感じてくれるメンバーも中にはいるんじゃないかという内容の会話をして、確かにと納得していた。しかしそれにも関わらずある種の申し訳なさが取りきれずにいた。委譲すること自体は上達しているものの、完璧とは言い難いし自分にとって心理的な負担を大きく伴うタスクの一つであった。

どうしてかなぁとぼんやり考えていると、委譲するという選択をある課題に対してもしくはある人に対してしたいと考えるとき、その意図が3種類あることに気づいた。そもそも仕事のベースラインの認識がちがうのでこれはあなたの仕事だからやってくださいのパターン、ある人の成長に繋がるのでやってくださいのパターン、どうしようもないので助けてくれーのパターンの3つである。もちろん得意分野が違うので委譲する(頼る)パターンもあるがこれは日常で行っているので考えないこととする。

無意識下で委譲する課題や人を選ぶときこのようなことを考えているが、いざ委譲するか否かを決めるタイミングになると単に仕事を頼むというレベルになってしまっているので、これを改めて言語化することで委譲することへの障壁を取り除けるのではないかと思い至った。そもそも最初の2つについて、期待を表明する重要性は言うまでもないので、やったほうが良いだろう。最後に関しては、この種の依頼がするということは僕が信頼している証拠であるので、それを伝えていくと良いかもしれないと感じた。

上記の内容を子供を保育園に送りながら考えていたが、今回は有効なアクションが洗い出せた気がしている。

自分が本来注力すべき課題を鮮明にするためにも、チームを強くするためにもどんどん委譲していきたいのでこれを実践していく。

2023年2月の振り返り

仕事の話

先月作成した今年のエンジニアリング方針を発表した。内容はきちんと伝わったと思うのだが、感想を聞くためにちゃんとアンケート取れば良かったなと後から反省した。とはいえ、早速「方針を聞いてどうしていこうか考えてます」という声がメンバーから聞こえてくるなど、ちゃんと反響があって安心した。

きちんと考えを示しておくと、それを見て行動する人が出てきて複利で効いてくるので、考えていることを発信するのが良いだろうと考え Slack に分報チャンネルを作った。社の CTO が #cto_jounal というチャンネルを作って発信しているので、それに影響を受け #ebihara99999_journal というチャンネル名にした。そこではとりとめもない独り言を流しているのだが、意識的に「何をしているか」と「何を考えて過ごしているか」を書くようにしている。併せて週報も作成し、一週間の主要な会議の議事録や個人的なメモをそこに残すようにしている。これにはいくつか意図があって、

  • 僕がどういう会議に出ているのか知ってもらう
  • 事業部の経営状況を話す主要な会議が多いのでそのポインタ一覧をメンバーに示せる。ほぼすべての情報がオープンになっているので興味を示して欲しい & 必要な情報があればそこから取りに行けるようにしておきい
  • 分報と同様考えていることをアウトプットする

という目的で行っている。とは言うものの、あまりしっかり残せてないなぁという反省も多いので、ちゃんと時間を作ってやっていきたい。僕がある仕事を終わらせても1の結果しかでないことがあるが、↑のようなことをきちんとしておくとメンバーが成果を5にも10にもしてくれるので、仕事の重要性をきちんと認識しやっていくべき。

 

ありがたいことに、ここ数ヶ月に新しく入社してくれている人が多く、オンボーディングメンバーでチームが組めるほどなので、いわゆる Good First Issue をチームでやっている。そのチームも僕が見ていて、実際的な技術やプラクティスを伝えることはもちろんだが、成長するためもしくは結果を出すために必要なメンタリティや文化をインストールするということもやっている。そこにおいても、チームの文化や良い振る舞いを明文化することによって生じるメリットは大きいだろうから、やっていかねばと考えている。

 

子供のこと

先月からの変化として、食事スキルがめちゃくちゃ上がった。一人で食べられるようになってきたもののスピードが遅かったり、こぼしまくったりしていてどうすると良いか考えていた。試しにスプーンの大きさを変えてみるとそれが大正解で、スピードも正確さも格段に上がった。本人も食べることがより楽しくなり、食事中に楽しそうにしていることが増え、本当に良かったと思う。

 

個人のこと

今年 Ruby 30周年とのことでとてもめでたい。おめでとうございます。Ruby や企業含めたそのコミュニティのおかげで今の自分がいると言っても過言ではなく、本当に感謝しています。生活とバランスを取りつつ、今年はコミュニティ活動も少しずつ再開していきたいなぁ。

ところで、今月はとても体調が悪かった。プライベートの疲れや仕事のプレッシャーや疲れ、睡眠不足が原因で体調を崩していた。妻にはとても迷惑をかけたのだが、3日間ほどほぼほぼ寝かせてもらい何とか回復した。一人の人間ができることは限られているので、あまり欲張りすぎず着実にやっていかなければなぁと反省した。不幸中の幸いというか、今の限界点やどういうこと・状態を辛いと感じるかを学べた良いきっかけではあるので、これを学びとして色々うまくやっていきたいと思う。

体調と関連してか、昼ごはんを普通に食べると眠くて午後の2時間くらいパフォーマンスがめちゃくちゃ落ちていた。困っていたところ「そもそもお昼の時間にはお腹空いてないのでは?」と思い昼ごはんの量を減らし、間食の頻度を増やすようにした。効果はてき面で、午後も集中力が切れずに進めることができるようになったし、夕方に空腹で辛くなることも減った。どうせ同じカロリーを取るんなら分割して取れば良かったのだった。