早いもので2022年も終わり…。
なんとか生き延びた。

今年は去年から継続したお仕事先で終わったところはないのだが、色々あって2社ほど仕事が増えた。
何だか計算が合わない気がするが、とにかくそうなのだから仕方ない。
とはいえ既存の仕事先に稼動日を少なく調整してもらったり、不定期稼働のところで振られたタスクを「今年中は無理」と断ってしまったりと、
全体的に見ると単純に稼働が増えたとは言い難く、さすがに無理が出てきた。
今のような働き方では仕事があるのはありがたいことだが…。

法人化2年目

相変わらず気持ちはフリーランスエンジニア4年目といったところで、特に法人としてどうこうしたわけではないが、
会社名義でのテックカンファレンスへのスポンサーは続けている。
ScalaMatsuriは2022に続き2023も同プランでスポンサーをすることにした。

お仕事の振り返り

週2日ずつ3社、その他に不定期で1社という働き方をしていたが、
平日夜に1社、さらに不定期で1社が増えることになった。
やれることがあるうちはやっていきたいとは思っているが、果たして。
2019年9月〜現在 週2日 Scala
現状、フリーランス以降に請けた仕事の中では最も長い期間になり、4年目に入った。
相変わらずScalaでバッチやWebAPIの実装をモリモリとやっている。

一時期、管理画面のフロントエンドをReact(Next.js)で書くタスクにもアサインされ、新鮮な気持ちで取り組めて楽しかった。
個人的には楽しかったのだが、戦力になれていたかは微妙なところで、
実装済みの画面を参考に類似の別画面を作り込んでいくのは見様見真似で何とかなっていたが、
これを何もないところから全部実装できるかというと、今のスキルセットでは難しいだろうと思いながら作業をしていた。
仕事で使っているScala,Go以外の言語も触ってみたいとは常々思っているが、なかなか実力がそれに伴わないので頑張りたい。
しかし、「仕事で使っている以外の言語も…」と言いつつ新規で今のような週2日程度の稼働では請けるのは難しいだろうとも感じていて、
既存の仕事先でメインはScala,Goをやりつつ補佐的に別言語のタスクも一部携わらせてもらうという今回のようなパターンが理想的かもしれない。
フロントエンドタスクは一時的なものだったので、基本的にはScalaでの開発を続けている。
最近の世間的なトレンドとしてはScala人気は下火かもしれないが、個人的には手に馴染んだ好きな言語で、
まだまだ学ぶべきところも多い奥深い言語でもあると思っている。
2020年12月〜現在 週2日 Go
去年から引き続き大きめの機能の改修・バグ修正を中心に色々と新しい事もできた。
GCP Dataflowで動くバッチを書くためにApache Beamのお作法を調べたり詳しい人に助けてもらいながら進めていき大いに学びになった。
社内プロダクトにGoで書かれたDataflowの実装がない状態で手探りで作っていったが、何とか動くものができてよかった。
自分の実装以降、いくつかGoのDataflowバッチは他の人の手にもよって増えてきているので、
先陣を切って踏める地雷は踏んでおく一定の役割は果たせたかなという思いと
初期の作りの詰めの甘さで後々他の人の手を煩わせてしまったかもという反省がある。

Shopify GraphQL APIやShopify Flowについてもこの一年で少しは詳しくなってきた。
来年以降も前述の大きめ機能の新バージョン開発などが予定されており、上手く進めていけるようにしたい。
2021年12月〜現在 週2日 Go
1年と少し経った。
サーバーサイドは大規模なリファクタリングやアーキテクチャ変更なども進んでおり、
キャッチアップが大変ではあるものの変化を楽しみながら組織・プロダクトの成長の様子を見ている。
Goの既存コードには質の高さを感じており、業務を通して学べる事が多くある。

組織もプロダクトも来年以降ますます面白いフェーズに入りそうな予感はあるが、
自分からタスクを見つけるのがなかなか難しくなってきているので、どのように関わっていくかは頭を使う必要がありそうだ。
2019年10月〜現在 不定期 Scala
ここは不定期というか…今年はあまり稼働できなかった。
全く何もしていなかったわけではなく、接続先サービスのAPIバージョン廃止に伴うバージョンアップ対応などちょこちょこやってはいた。
これまではタスクが振られたらやる、無いときは無い、くらいのペースではあったのだが、後述する仕事先追加により
とうとう振られたタスクを別案件多忙につきパスさせてもらった。

某社の子会社化した事などあり体制に変化があるようで、来年からの業務委託契約を締結し直す事になり、
しばらく動けていないためこれを機に契約終了を打診されるかこちらから提案してみるか、と思っていたのだが、
軽くそのような話をしてみるとまだ使い所があるとは思われているようで、一応来年も契約は続けさせてもらう事になった。
実質開店休業状態になってしまっているが、他の仕事が落ち着けばまた貢献していきたい。
今年6月〜現在 平日夜 Go,QuickSight
特に新しく仕事を探している状態ではなかったのだが、以前から登録していたフリーランスエンジニアに仕事を紹介するエージェントから紹介があり、
稼働時間を柔軟に対応してもらえるとのことだったので話だけでも聞いてみるか、というのがきっかけ。
今のところ他の仕事は元同僚やSNSなどから直接請けており、今更エージェント経由で受ける事もないかとは思いつつも、
合いそうな仕事があれば紹介してください、というステータスのままにしていて、
基本的には少なくとも週3日以上という案件がほとんどのようなので期待はしていなかったのだが、
今となってはもう紹介はストップしてください、と伝え直していなくてよかったと思っている。
ちなみにここの仕事を請けた直後ぐらいに同様の柔軟な稼働時間での別案件の紹介もあり、もしかしたらそういう仕事が増えてきているのかもしれない。

仕事内容としてはデータ基盤チーム的なところで色々とデータの整備を行なっている。
立ち上がったばかりのチームで、データをどう整備してどう活用してくか、誰向けにどう見せていくかなど検討段階でもあるので手探り感はあるが、
データ収集・加工などのバッチを書いたり分析ダッシュボードを作ったりしている。
データ基盤にはDebeziumEmbulkを使ったりと初めて触る技術もあり学びになっている。
また、直接携わっている部分ではないがデータパイプラインにはSparkやKafkaなど色々面白そうな技術が活用されているようだ。

今のところ、データを集めるなどの目的でGoでバッチを書くタスクも一部あるが、QuickSightでの分析・ダッシュボードの作り込みが作業の大部分を占めている。
こちらも初めて触るのでどういう機能があるのか調べながらではあるが、コードをガリガリ書く他の仕事とはまた趣向が異なり、良い経験となっている。
QuickSightの知見も多少は溜まってきた。
最初のうちは何をどう進めればいいか迷いもあったが、
週次のMTGで進捗の共有と次の一週間で何をやっていくかをまとめるようにしてもらってからはだいぶペースが掴めてきたとは思う。
しかし、当たり前と言えば当たり前だが一日数時間の細切れの時間ではなかなか思うように進捗は出ない事もある…。
平日1日のスケジュールとしては、だいたい10時〜19時くらいに昼の仕事を、1時間夕食兼休憩をとって20時〜22,23時くらいにこちらの仕事を進めている。
最初はこんなやり方は現実的ではないのでは…と思っていたが、慣れれば何とかなるものだ。
本当に何とかなっているかどうかは成果を出して証明するしかない。
(正社員として平日フルタイムで働いている人が副業をするとしたらこういう形式になりそうなので、全く出鱈目な働き方でもなさそうではある。)
今年9月〜現在 不定期 Go
この仕事は完全に予定外ではあったのだが、元同僚からこういうものを作ろうとしているんだけど、と声をかけられて
とりあえず報酬の発生しない趣味の範囲でプロトタイプ実装やライブラリ選定をするような微妙な立ち位置で関わり始めて、
いよいよ本格稼働するので仕事として請けるようにしたのが9月から。

乗り掛かった船なのでとりあえずファーストリリースして落ち着くまでは伴走するか、くらいのつもりだったが、
フロントエンド1人(正社員)、インフラ1人(業務委託)、バックエンド1人(業務委託:これが私)という
バス係数激低体制なのでおいそれと離れづらくなってしまった、という状況。
現状バックエンドエンジニア1人なので自分が分かればいいや、という誘惑を跳ね除けながら、
正社員のバックエンドエンジニアを採用できればその人に任せられるよう手離れしやすい作りを心がけてはいるが、
実際にそのようにできているかはあまり自信がない…。
何もない状態からサーバーやバッチを開発するフェーズなので、ライブラリ選定やアーキテクチャ構成など自分で全て考えて実装する必要があり、
ゼロイチならではの楽しさと苦しさを味わってはいる。(開発言語がGoなのは先方からの依頼であり、自分が選んだわけではない)
複数あるサーバーのうちフロントエンドと対になる管理画面用APIにはoapi-codegenを使ったOpenAPI定義からの自動生成を、
そうではないバックエンドのみで完結する機能を持った速度を求められるサーバーにはfasthttpを採用することにした。
DBライブラリは色々と悩みどころではあったがsqlxのみを薄く使い、
単純なCRUDクエリや結果取得用structやそのマッピング処理はCREATE TABLE文を元にコード自動生成するツールを自前で書く事にした。
おそらく車輪の再発明感はあり、既存ORMライブラリだけで解決できる気もしているが、
特定ORM固有のお作法に従わざるを得なくなる事、特定ORM固有の不具合や謎挙動と戦わないといけなくなる事とのトレードオフでこの決断をした。
これが良い決断だったかどうかは、リリースが終わって人が増えある程度の時間が経った後にしか分からないかもしれない。

前述のエンジニアチームは皆勝手知ったる元同僚で、インフラにこの人が参画するなら自分もやろうか、と決めたくらいではあるのだが、
ビジネスサイドの人や会社自体の文化とは率直に言って水が合わない(これは中の人にも1on1の機会に伝えている)ので、
早くフルタイムで稼働できるバックエンドエンジニアを採用して自分自身はあまり深く立ち入らないようにしたい。
作業量の多さによる多忙より、軽蔑に値する人間との関わりによる心身の摩耗のほうがダメージが大きい。
ビジネスサイドの人たちもまた元同僚ではあるので、彼らの名前を聞いた時点で「その人たちが絡んでいるなら自分は辞めておく」と断ることもできたのだが、
かつての会社での失敗や上手く立ち行かなかった経験を踏まえて反省を活かし次はよりよい事を成し遂げようとしているなら思いを同じにできるかという期待もあった。
これはただ自分が勝手に抱いていた期待なので、結局蓋を開けてみるとそうではなかった事に文句を言うのは筋違いではあるが、
かつての会社の悪い部分だけを煮詰めたような小規模な会社だな、という諦観がある。
こういう手合いと仕事で関わらないためにフリーランスエンジニアになったんだった、という初期衝動を思い起こす機会にはなったし、
実際フリーランスエンジニアになってからはそういう手合いとは関わらず楽しく仕事をできている事を再認識もできた。
とはいえ、やると決めたのは自分なのである程度の区切りまでは最低限やることはやるつもりではいる。
お仕事振り返りまとめ
後先をあまり考えず仕事を増やした結果、ギリギリなんとかなってはいるがかなり無理をしている状態である自覚はあり、是正したい思いはある。
1つ2つ仕事を減らして整理してもいいのだが、一度減らしてからまた増やしたくなった時にそんなに都合よく見つかるか?という強迫観念にも近い不安があり、
なかなか踏み切れないところがある。
稼働状況を鑑みてあまり貢献できなくなってきたので抜けても問題なさそうか、と思い込んでいたが
実際に話を聞いてみると(どこまで社交辞令かは分からないが)まだ利用価値を感じてくれているようなところもあり、
またそういう話を直接する機会があったわけではないが稼働日増加を要望されたり来年以降アサインされるタスクがすでに用意されていたりと、
減らすとしてもどこを…というのも悩ましい。(贅沢な悩みである)

今年は全く新しい事ができなかったとまでは言わないが、現状持っている武器で倒せる敵を倒す時間がただ増えただけという感覚があり、
新しい武器を入手したり手入れしたりすることに割く時間や労力を確保できていないのは、あまり良くない傾向だ。
去年のブログを読み返すと「不定期稼働の仕事先をもう何社か増やしたい気もする」などと言っており、ある意味でそれは達成できたとも言えるだろうか。

来年は法人設立から2年間の消費税免除期間の恩恵がなくなり、実質的な実入りは減ってしまうのがつらいところだが、
目先の利益だけにとらわれず引き続き頑張っていきたい。

OSS活動

時間がなくなってきたとは言いつつ、今年はちょいちょいPRを出したりもできていたようだ。
こうして見ると、Goはライブラリ選定のついでに気づいたところをPRにしたものが多い。
今年前半はZigを学ぼうとしていた形跡もあるが、あまり長続きはしなかったか…。
Zig
fubark/cosmic
set graphics_backend
prime31/zig-renderkit
Fix for dev version
prime31/zig-gamekit
Fix for dev version
mattnite/glob
fix for removed iterate, read flags
mattnite/gyro
use IterableDir instead of iterate flag
Go
xitongsys/parquet-go
fix TestReadBitPacked
go-gorm/gorm
Replace ioutil.Discard with io.Discard
Refactor: redundant type from composite literal
apache/beam
Move Go examples under the cookbook directory to generic registration
remove "io/ioutil" package
pdfcpu/pdfcpu
fix ListImages comment
mackee/go-sqlla
fix: add char to sqlTypeToSchemaType

その他私生活の振り返り

今年は前々から好きだったバンドのライブにいくつか行くことができ、そちら方面では充実した年だった。

永らくバンドでの活動を行なっていなかったロボピッチャー。
一度は活動完結したうみのて。
一度は解散したナンバーガール。
生きていれば、かつて好きだったあれやこれやに、また巡り会える事もある。
今年もよく生きた。来年も生きていこう。

Copyright© 2011-2021 Shunsuke Otani All Right Reserved .