Ryukalice

2021年の振り返りと傭兵エンジニアの限界について

2021-12-30

2021年は一度もブログを書かなかった。Qiita や Zenn といったメディアでの技術記事執筆も行わなかった。非常に怠惰な1年であったが、自分がそこそこに甘んじることを許せた1年になった。

傭兵エンジニアの限界

American Harvard Grad Tries to Advise Mexican Fisherman という有名なジョークがある。私が仮に大成功したとして歩みたい人生は、田舎に一軒家を立てて妻と猫に囲まれて四六時中ゲームをして過ごすというもので、これは既に叶っている。1日2時間程度の労働をしているとはいえ、通勤もなく労働中の不自由もないので余暇の確保という意味では成功を収めていると言えるかもしれない。今後の人生はいかに仕事の時間を減らすかに尽力すべきだと思う。

一攫千金を狙うにあたって、傭兵的な働き方をするソフトウェアエンジニアは極めて夢のない職業だ。いわゆる労働力を売り歩くような働き方では、どんなに頑張っても年収2000万程度が限界だ。現実的なラインだと月100万の仕事を1件と月10〜30万の保守運用や教育案件を数本掛け持ちしてギリギリといったところだろう。これ以上を稼ごうと思えば、自分でサービスを立ち上げる等といったビジネスを始めるしかないと思う。物だけ作っていたい開発者として生きていくのであれば、経済的な大成功はほぼ見込めない。しかし、私はそれで良いと思っている。今までは自分がそう思っていると自分に言い聞かせてずっとモヤモヤした野心を抱え続けてきたが、年齢も30を超えてそういった野心を失っていった。

特に今年は Twitter でいろんな人とゲームの話をするのが楽しくて、仕事のことを考える暇があったらゲームをすることを自分に許せるようになった。「そろそろ技術記事を書いておかないと」とか、「Ruby on Rails 7.0 がリリースされたから触らないと」とか、そういった強迫観念からようやく解放されたのは大袈裟ではなく Twitter の力が大きかったと思う。「技術力も高く保っておかないと」という焦りから解放され、「ゲームする時間が減るぐらいならそこそこでいいや」と思えるようになってからは人生の幸福度が上がって少しメンタルが安定するようになった。幸せになるために成功するのではなく、成功を諦めてから幸せを感じるようになったのだから皮肉なものだ。

余暇

とはいえ食っていくためには技術から完全に逃げるわけにはいかないからソフトウェアエンジニアとしての仕事は続けているわけだが、今年は Ruby on Rails と Next.js を変わらず触り続けていて、年末あたりから Flutter を始めた。7月に大きなモバイルアプリケーションのリリースを予定しているので2022年は Flutter の年になりそうだ。なんだかんだ言って、向こう10年ぐらいは Ruby on Rails、Next.js、Flutter の3本で食っていけるのではないかと思っている。最近は技術情報を追うことすらしなくなっている。エンジニアはそうなってしまったら終わりだと思っていた時期もあったが、スタートアップ企業に勤めて副業で開発業をやっていれば、自分から技術を追わなくても勝手に新たな技術を習得する機会が訪れるので、余暇は気が乗った時以外は技術に関する勉強をしないようになった。幸いにして、Flutter は web や Firebase 周りも含めて大きな可能性を感じていて、勉強のリターンが大きそうなのでモチベーションは保てている。

代わりに最近ハマっているのが資産運用と英語学習で、資産運用は何年か前から「いつかやろう」とずっと思い続けていたものを今年になってようやく証券口座を開設するに至った。株式投資を本気でやりたいわけではなく「銀行以外の場所にお金を置いて放置しておきたい」程度のモチベーションなので、今年は eMAXIS Slim 全世界株式をつみたて NISA 満額分購入した。年利5%で半年で2万ぐらい儲かっているようだ。つみたて NISA は20年放っておくものっぽいのだが、仮に年利5%のまま推移したら20年後には元本800万が1300万ぐらいに増える計算になるようだ。株について勉強する気は全くないので、今後も誰もが安定だと言っている緩やかなものを余ったお金で適当に買い続けようと思っている。2021年で株の買い方的なものは最低限分かったので、2022年は夫婦でつみたて NISA 満額分買って、あと数百万ぐらい余っているお金を楽天 VTI か何かの評判が良いものに投資しておこうと思っている。成功を諦める話にも繋がるのだが、余っているお金を投資したら案外増える、ということが分かったことは将来の不安を大きく軽減してくれた。こんなに簡単なのであれば、もっと早くやっておけば良かったと思う。英語学習についてはスタディサプリを3万円ぐらいで年間契約して、クリア済みのゲームを英語設定でプレイする等して少しずつ勉強している。

2022年に向けて

現状維持に尽きる。ゲームを楽しみながら、資産運用を続けながら、適当にエンジニアをやっていく。技術面の話をすると、Ruby on Rails はまだ戦えると思う。プロトタイピングの仕事において CRUD メインの画面構築や API サーバーの実装はやはりまだ Ruby on Rails が強い。一応色々触ってはきたが、やはり ActiveRecord が強すぎて生産性の面では乗り換え先が見つからない。単純に Ruby が好みの言語ということもあり、まだしばらく使うだろう。最近は TypeScript や Dart で型を書くことが増えてきたが、やはり Ruby をキメるのは気持ちいい。ソフトウェアの振る舞いだけを書くことで物が出来上がるのは最高だ。プログラマーのためのプログラムを書かなくて良いのは、現状の主要なプログラミング言語では Ruby でしか得られない体験であろう。Next.js は正直適性と好みの問題で書いていて気持ち良くはないのだがフロント関連の最適解に近いフレームワークだと思っているので使い続けることにはなるだろう。Flutter はまだ半月しか触っていないが最高に良い。Dart をそこそこ気に入っているのもあるが、モバイル以上に web 側に可能性を感じている。これまで HTML という文書構造を表現するための言語でアプリケーションを作るのにずっと不満を抱えていて、React/Next.js を手持ちに加えてからは styled-components に命名して要素を隠蔽できるようになったのは多少良くて溜飲を下げていたが Flutter Web はアプリケーションのことしか考えなくて良いのが最高に良い。例えばボトムナビゲーションを実装するにあたって、<nav class="bottom-navigation"><div>...</div></nav> といった HTML を書かなければならなかったのを React では <BottomNavigation /> のようにコンポーネントに隠蔽できるようになって少なくとも pages コンポーネントのレイヤーにおいては HTML の世界観から逃げられるようになった。しかし Flutter は BottomNavigationBar() で済む。特別な場合を除いて、このコードがどのような HTML にパースされるかに責任や美学を負わなくて良くなった。セマンティクスだの CSS コーディングスタイルだの全部 Flutter に押し付けることで、ようやく「文書」という世界から逃げられるようになり、アプリケーションソフトウェアの世界と本質的に向き合うことができるようになったわけだ。これは長年の夢が叶ったような気分である。現状この辺がエンジニアを続けるモチベーションになっているが、この先30年も自分の技術力や産業の動向と向き合い続けるのは正直しんどいので、遊びで開発して基本は不労所得で食っていけるような生活を目指して2022年は怠惰に頑張っていきたい。