『Eloquent Ruby』でRubyistになるための文化を吸収できた気がする

『Eloquent Ruby』というRuss OlsenによるRubyについての本を読みました。

Amazon | Eloquent Ruby (Addison-Wesley Professional Ruby Series) | Olsen, Russ | Ruby

僕の所属するSmartHRではRubyをメインのバックエンド言語としており、もっとRubyについて知りたかったのと、redditなどでおすすめの本としてよく挙がっていたというのが読むに至った動機です。
2011年出版の本であり、ターゲットRubyバージョンは1.9と古いですが、今でも十分に役立つことが多く書いてありました。

著者のRuss Olsenは他にDesign Patterns in Rubyなども書いています。

Amazon | Design Patterns in Ruby (Addison-Wesley Professional Ruby Series) | Olsen, Russ | Ruby

本の構成

構成としては、以下の通りです:

  • PART I: The Basics
  • PART II: Classes, Modules, and Blocks
  • PART III: Metaprogramming
  • PART IV: Pulling It All Together

PART Iでは、Rubyの基本的な書き方や、制御構造、コレクション、文字列、正規表現、シンボル、オブジェクト、ダック・タイピング、テストについて書かれています。

PART IIでは、クラスについて、演算子のオーバーライドや特異メソッドの使い方。また、モジュールについて、名前空間としての使い方と、ミックスインとしての使い方。そして、ブロックについて、イテレートでの使い方と、「execute around」での使い方と、あとで実行するための使い方について書かれています。

PART IIIでは、メタプログラミング的なところで、フックについて。また、method_missingについて、柔軟なエラーハンドリングに使う場合と、委譲に使う場合と、柔軟なAPIを作る場合について。そして、モンキーパッチや、自身やサブクラスを変更するクラスの作成方法について書かれています。

PART IVでは、内部DSLや外部DSLの作り方、Gemの作り方、Ruby実装について書かれています。

各章は、それぞれのトピックについて、全体を通してドキュメントを扱うプログラムをメインにコードも交えて説明し、In the Wildというコーナーで、RailsなどのgemやRubyビルトインコードでその章で紹介したトピックが実際にどのように使われているかを書き、Staying Out of Troubleというコーナーでトラブルを避けるためのtipsを紹介し、最後にWrapping Upというコーナーでまとめるという構成になっています。

感想

良いRubyプログラムを書くにはどうすればいいかということから始まり、privateなメソッドも send を使えば呼ぶことができたり、クラスがオープンであることなど、プログラマーが責任を負うことを重視しているといった、Rubyの哲学まで知れた気がしてとても良い本でした。
前書きで、Rubyを使いこなすには言語の構文といった基礎だけでなく、文化を吸収することが大事ということが書かれていました。この本を読むことで、Rubyの文化を知り、Rubyを使いこなすにあたってどのような姿勢で取り組めばいいかが少しつかめたような気がします。
あとは、In the Wildというコーナーが特に面白かったです。魔法のように使わせてもらっているgemやRuby自体も、当たり前だけど1つ1つあの手この手を使って人の手で書かれているのだなぁと再認識しました。

今後も必要な時に参照して、良いRubyのコードを書く一助になってくれる気がしています。良い本でした。

子育てをしながらのスキルアップに対する焦りと向き合うために決めたこと

僕は昨年1月に結婚した妻と、昨年7月に生まれた子どもの3人で暮らしている。

子育てが始まると時間が無くなるとはよく言うものの、本当にそうだというのを、子が1歳を過ぎた今も痛いほど実感している。
平日は仕事と家事をこなしたあとは疲れで何もやる気が起こらないし、休日は買い物やら子どもの世話やらであっという間に終わっていく。

時間が無くなることで、自分の中で特に問題になったのが、スキルアップを満足にできていないという焦りが生まれてくることだ。
休日に家族の相手をしていても、「あ〜あれもこれもまだまだ覚えることがたくさんあるのにやばいなぁ」とかそんな考えが頭を支配したまま過ごしてしまったりする。

しかし、これって学習ができていないことを家族のせいにしていないかということに気がついた。
そもそも独身時代に学習に打ち込めていたかというと怪しい気がする。
こんな心理状態になっているのは自分にとっても家族にとっても何も良くないと思った。

そこで、家族と過ごす時間は目の前の家族と全力で向き合う時間にし、学習は独りになれる時間だけに集中して行うことにしようと決めた。
平日朝、妻子を送り出してからリモートワークの始業時間まで1時間ある。そこを学習時間にする。
今は疲れで始業まで二度寝してしまったりしているので、まずは運動などで体力をつけて疲れに打ち勝てるようにし、その時間を学習に充てる。
スキルアップに天井はないのだから、無限に時間があったとて、それでも足りないと思うのが心情だろう。継続すれば毎日1時間でも、やがては積み上がっていく。それで十分じゃないか。

子育てというたいへんな幸せを過ごす中で、スキルアップとどう向き合うかは難しいところだけど、僕はこのように、学習する時間はここだけというのを決めて、それだけできれば十分というように、考えることを減らすことにした。
子育てもスキルアップも丁度良く楽しく頑張っていけたらと思う。

『Atomic Habits』を読んで運動の習慣を身につけられそうな気分になった

僕は妻と1歳の子と3人で暮らしています。
子育てをしながら毎日を生きていると、疲れて機嫌が良くない状態になってしまったり、仕事以外のことをやる余裕がなくなったりということが続いてしまいます。
これは体力が無いことも一つの要因ではないかと、体力をつけるために運動をしなければと思いつつ、運動をするための体力がなくて、いつまでも体力がつかないという悪循環に陥ってしまっています。

そんな自分を変えたくて、運動習慣をどうにかして身につけたいと、習慣に関する本として度々名前が挙がっていた『Atomic Habits』(邦題: 『ジェームズ・クリアー式 複利で伸びる1つの習慣』)を読んでみたのでした。

www.amazon.co.jp

本の紹介

この本では、まずどんな人になろうとするのかが大事と語られています。例えば、読書をすることではなく、読書家になることが目標、マラソンを走ることではなく、ランナーになることが目標といった具合です。
そして、習慣によってあなたは習慣そのものになるのだと言っています。

また、習慣には4つのステップがあると言っています。

  1. きっかけ (Cue)
  2. 欲求 (Craving)
  3. 反応 (Response)
  4. 報酬 (Reward)

なんかよく似たものを見たことがあるなぁと思ったら、Courseraの『Learning How to Learn』で知った習慣の4つの要素でした。こちらはCue(きっかけ)、Routine(決まりごと)、Reward(報酬)、Belief(確信)とされていてちょっと違いますね。

tkykhk.hatenablog.com

それはさておき、さらに、良い習慣を作るための4つの法則を紹介しています。

  1. 分かりやすくする (Make It Obvious)
  2. 魅力的にする (Make It Attractive)
  3. 簡単にする (Make It Easy)
  4. 満足感のあるものにする (Make It Satisfying)

具体的な適用方法の例を順に紹介します。

分かりやすくするための1例として、「いつ、どこで、〜をする」といったように決めておくことがあります。
魅力的にするための1例として、やりたい(want to)行動を、しなければならない(need to)、つまり習慣化したい行動に結びつけることがあります。
簡単にするための1例として、2分ルールという、とりあえず2分だけやるといったルールに従うことがあります。
満足感のあるものにするための1例として、即時の報酬を自分に与えるようにすることがあります。

基本的には、この習慣の4ステップと、4つの法則について、様々な実験のデータなどを根拠として説明していく本です。
どこかで聞いたことのある話も多分にありつつ、習慣を身につけられそうな気分にはさせてくれました。

本を読んで実践していく

ただ、頭で理解しただけじゃだめだと思い、じゃぁ運動習慣を身につけるためにどうやっていく?というのを考えてみました。

まず、何を習慣化させるかというところですが、Fit Boxing 2をやっていこうと思います。酷暑の中、室外で運動するのは厳しく、家の中でなら費用もかからず、すぐ習慣化を始められそうな気がするからです。

次に、4つの法則に基づいて行動設定をしてみます。

「分かりやすくする」ために、朝、妻子を見送ったら、帰ってきてすぐ始めることにします。
「魅力的にする」ために、運動をして初めて、学習をしていいことにします(学習がwant toって自分ながら偉いなと思いつつ)。
「簡単にする」ために、ゲームのおすすめ1セッション時間である38分より短く、28分から始めます。また、毎日とは言わず、まずは週3日からスタートします。
「満足感のあるものにする」ために、エクササイズが終わったら、報酬としてお気に入りの味のプロテインをゴクッと飲むことにします。そのあとのシャワーも報酬に入れてしまいます。

ここまで書いて、最初から目標を高く持ちがちだったので、特に「簡単にする」ことで、なんだか続けていけるような気がしてきました。

まとめ

この本では冒頭で、重要なのはゴールの設定ではなくシステムであると言っています。
システムは設定したつもりになれたので、家族の幸せのためにも、あとは朝に拳を振っている姿を続けていこうと思います。

ブログをはてなブログに戻しました

Astroで個人サイト( https://okweird.net/ )を構築していたのですが、dependabotでバージョンを上げるのがちょっと面倒になってきたので、サイトはHTMLとCSSだけで書いて(滅多に更新しないのでこれで良さそう)、ブログは前に使っていたはてなブログに戻しました。

これを機にもうちょいブログを書いていけたらと思っています。
よろしくお願いします。

近況 - SmartHR入社とか

ここのところブログをあまり書けてなかったので近況でも書いてみる。

GMOペパボ退社

2019年9月から約3年半所属したGMOペパボを退社した。

30代半ばにして正社員経験がなく技術的な経験も浅かった僕を雇ってくれた、とても懐の深い会社だと思う。
ホスティングという広く深い世界で、様々な技術や知識を得ることができた。
ペパボで大切にしている3つのことのうち、特に「みんなと仲良くすること」という点について実践できたように思う。なぜか鹿児島のメンバーと特に仲良くさせてもらったりもした。
ペパボのエンジニアは皆レベルが高く、エンジニアとしても人としてもロールモデルと言えるような人に出会えたのもとても大きかった。

3年半、本当に充実していた。ペパボが今後の自分の中での基準になっていくことだろうと思う。

SmartHR入社

色々と考えた上で転職活動した結果、縁があって2023年4月にSmartHRに入社した。

オリエンテーションがとても充実していて、色んなグループの色んな背景や活動を頭にインプットすることができ、会社がどうやって動いているのかを初めから知ることができた。
開発面ではスクラムが取り入れらており、僕はアジャイルから未経験なので、色々と本を読んだりして、そのキャッチアップを行っている。
クロスファンクショナルが推進されていることもあり(クロスファンクショナルという言葉の定義が今も自分の中でフワッとしてはいるものの)、フロントエンドを触ってみたりもしている。

40歳も遠くない今、これから数年のがんばりが今後のキャリアに大きく影響するだろうと思うところもあり、しっかりやっていこうと考えている。

妻が復職、子が保育園入園

SmartHR入社と同じ4月から妻が復職し、子が保育園に入園した。

妻の出社が早いため、夫婦とも6時に起きて、妻が準備をする間、朝ご飯を作ったりといった朝の生活に変わった。
子は早速、保育園で風邪をもらってきて家族みんなに感染ったり、突発性発疹が出て治ったかと思いきやまた別の発疹が出たりと洗礼を浴びた。

なかなか学習の時間が取れない生活なので、工夫していく必要がありそうというのを感じている。

これから

今後はひとまず、仕事で使っているRubyRuby on Rails、React、Next.jsといった技術に熟達したい。 チュートリアルを読みつつ、サンドボックス的なWebアプリケーションを自作して、手を動かしながら覚えていきたいと思っている。

一方で、今年の抱負などでもずっとやりたいと言っている数学は、残念ではあるがしばらくやれなさそう。
単純に時間がない。色々やりたいけど子育てしている以上、選択の必要がある。

というわけで、家族との時間を大事にしつつ、研鑽を小さくコツコツ重ねていきたい。

2023年抱負 - 家族第一に、数学と機械学習をやる

子と過ごす初正月、家族に囲まれてとても幸せに満ちていたなーと思いつつ、恒例の年初抱負を書いてみる。

技術

機械学習

昨年はMidjourneyやChatGPTが世に出たりすることで、AIが飛躍的な進歩を遂げた年だったように思う。
流れに置いていかれて、その辺りの領域をブラックボックスにしたままでは、自身のキャリアとしても、技術の利用者としても危険だと思い、今年は機械学習を真剣にやっていくことにした。

去年の抱負から言い続けていることではあるが、今年は本気度を上げて取り組んでいきたい。

数学

そのためにも、まずは数学をやる。

僕は高校を1年で中退していて、20代半ばで受けた高等学校卒業程度認定試験も英語だけ受験して取得した。そのため、まずは高校数学からと思っている。Long long journeyではあるがやっていきたい。

手始めに長岡の教科書をやり終えるところから(今は数学IIの途中)。
AIの第一人者であるAndrew Ng先生が関わるMathematics for Machine Learning and Data Science Specializationという、まさに自分のためのようなコースが1月にリリースされるようなので、それもやっていきたい。

家族

今は何よりも家族の幸せを優先にしたいと思っている。去年、子が生まれたことで、ますますその思いが強くなった。
今年の4月には妻が仕事に復帰し、子が保育園に入る予定なので、できる限り家事を協力的にやっていく。
学習にかけられる時間は少なくなるだろうから、技術は流行りのあれこれに手を出すのではなく、ファンダメンタルなものをやっていくことになるかもしれない。

まとめ

今年はこんな感じになりそうだろうか。やる事としては、かなり絞った形となる。

去年もやる事は最小限にと書いていたが、その方針は変わらないだろう。
家族の幸せを第一に、毎日の小さな喜びを大事にしながら、楽しく過ごせていけたらいいなと思っている。

2022年振り返り

今年も恒例の年の振り返りをする。

2022年抱負 - 数学と機械学習、楽器をやっていくに書いたことを中心に振り返っていく。

技術

数学

やろうと思ったものの、長岡先生の授業が聞ける高校数学の教科書数学I+Aを終えて、少し数学IIを進めるに留まった。
時間が取れなかったり、他に優先したことがあったりで、なかなか時間が取れなかった。

機械学習

全くやれていない。まぁ、そもそも前段として数学をやる必要があるので当然ではある。今年はAIが飛躍的な進歩を遂げたと言っても良い年だったので来年こそはやる。

Go

本を『The Go Programming Language』、『エキスパートたちのGo言語』、『実用 Go言語』、『Powerful Command-Line Applications in Go』と読んだりと、結果的に昨年に続き一番力を入れた技術となった。
ただ、目立ったアウトプットを残せていないのは課題。もっと課題を発見し、形にする力をつけていきたい。

趣味

楽器

全くもってやれていない。まぁ、結婚したり子どもが生まれたりで、今は厳しい感じではある。でも、いつかは教室に通ったりバンドを組んだりということをやりたい。

XR

持っていたMeta Quest 2は売り払ってしまった。こちらについても、結婚して子どもが生まれて、家でヘッドセットをつけるのがこっ恥ずかしいというのがあった。よっぽど今後流れが来ない限り、おそらくもう手を出すことはないかなぁという感じ。
メタバース的なものだと、タッチポイントがXRである必要もあんま無いのかなぁとか思ったりしている。そもそも既存のMMORPGなんかだって立派なメタバースなんじゃないかとか。

まとめ

今年の抱負では、まとめとして、

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

と書いていたが、結婚と、子どもが生まれたことにより、やることを最小限にするのは必然の結果となり、根を詰めないというところは重要になってきたと思う。
豊かな日々は送れたので、そういう意味では達成出来たのかなという感じ。

まぁ、とにもかくにも子どもができたというのはとてつもなく大きなイベントであったし、それに尽きた年だったと思う。
大きな苦労もあったが、大きな幸せもあった。改めて妻や支えてくれる方々に感謝。

その子育てもだいぶ慣れてきたので、来年はもっと余裕のある年になるかもしれないと思っている。

ではでは

それでは、今年もお世話になりました。来年もどうぞよろしくお願いいたします。
みなさま良いお年を!