A Day in the Life

2020年の振り返り

今年は日記も再開したことだし、一年の振り返りを。

生活

去年の秋から2年ぐらいかけて世界一周中を行い、本当なら今頃南米にいる予定だった。当時書いたざっくりすぎる予定はこんな感じ。しかしながら、コロナ禍のため、3月上旬にトルコから帰国することに。

2年弱のプランがだったの5ヶ月で頓挫(世界一周は再開予定だけど、再開の目処はまだ立たず)、家も引き払ったため宙ぶらりんな状態で、AirBnBで民泊に止まりながら3月4月を過ごす。楽天的に考えると短期間でコロナが収束して、という当てはハズれ、コロナが世界的に広がる気配しかなかったので、5月から横浜に家を借りて暮らし始めた。

3月4月で感じたことは、目的のない無職に自分は向いていないのでは、ということだった。なにかしたいことがあっての無職、もしくは「あえて何もしたくないから」、と何らかしかの目的(何もしたくないは目的なのか、ということはさておき)があって悠々自適に過ごすのは良いが、本来なら世界各国に行けたはずが...、と今の自分と比較し仕事をしないで過ごす状態はもやっと感があった。

仕事と生活

そんな中で、4月に知り合い各所からありがたいことにいくつか仕事の話をいただく。しばらく開発から遠のいていたので経営・組織マネージメントは行わずサービス&ソフトウェア開発を主でやりたい、かつコロナ禍が落ち着いたらプロジェクトを抜ける前提であること、業務時間に縛られないフルリモートであること、組織に所属しない(所属には良い面と悪い面がある)こと、プロジェクトのステークホルダーが少ないこと、自分の力を活かせそうなこと(活かせないと、ただの使えないおじさん…)、等々の条件にマッチした仕事をすることに。

いざ条件を振り返ると我侭な条件だなぁと思うが、仕事のアウトプットを最大化するには、自分のモチベーションマネージメントも非常に重要なので、モチベーションが下がる要因が最初から多分に含まれるような仕事は受けないほうが良いであろう。

受けた仕事は、知り合いが新しく立ち上げた会社の新規プロダクト開発で、話を聞いた当初は実現したい世界観はなんとなくは解ったけど細部はまったく解らず、どういうプロダクトの形になるかも解らず、しかしながら実現したらより良い未来が感じられ、よりその世界観を深く理解してみたいし、そのサービスがあったら面白そう、という物を具現化するソフトウェア・サービス開発だ。

生活リズムは、朝4~6時(日の出前)に起き、朝6時~7時に仕事を始める。すると午前中だけで5~6時間仕事ができるし、8時間仕事をしても15時頃には仕事を終えられる。いつでも仕事をしてよいため、当初は土日働いて週の平日に適当に休んでいたのだけど、休みが決まっていないとリズムが作れなかったため、今は土日は休む(時々休日でも気になる機能・実装が出てくると作業したりするのだけど)感じだ。

開発はスケジュールとマイルストーンを決めて開発する時期と、実際にサービスを使い考える時期(仕事は作ればたくさんあるけど、それよりもサービスの理解を徐々に深めたい時期)に分かれ、前者の場合は普通に毎日7-8時間仕事をする日も多く、後者の時期の場合は1-2週間ほとんど仕事をしなかったりもした。

また、朝早い時間から仕事をすることで、午後まるまる、遅くとも夕方~自由な時間ができ、近所を散歩したり(横浜みなとみらい周辺は散歩スポットがたくさんあって散歩が楽しい)趣味のあれこれをしたりと、好きに過ごすことができ、仕事と生活のバランスが良かった。毎月の仕事量は振り返って見直すと、100時間強程度であった。

組織に所属すると、基本的には毎月の給料を得るために時間縛りが発生する。1日8時間仕事をしなさい。今年は仕事をしたいときにし、したくない日にはしなかった(もちろん納期的なスケジュールがあるときは別だけど)。会社、という組織は仕事に時間面でコミットさせる点で見ると効率の良い仕組みだな、と思う。

個人で仕事を請け負っていると、もちろん契約内容や仕事内容にもよるのだけど、全体的な仕事量のさじ加減は自分次第だし、アウトプットでの顧客満足度によって報酬・仕事の継続が決まってきて、自由度は高い反面きちんと成果を挙げなければならない。

2020年における一人開発の技術アーキテクチャ選定と感想

仕事の開発の最初2-3ヶ月ぐらいは概念理解と認識合わせ、どうソフトウェアで具現化するかのUX作成からのプロトタイピング・コンセプト実装を繰り返した。その中で技術アーキテクチャを固めていく。アーキテクチャは組織・プロダクト・プロジェクトメンバによって最適解が変わってくるが、今回はある程度の期間は自分ひとりで開発・運用~全部やる、ということもありできるだけ運用コストが最小になるような形となった。サーバサイドは Firebase Cloud Functions で、データベースは Cloud Firestore、ファイルストレージは Cloud Storage、認証は Firebase Auth、Web ホスティングは Firebase Hosting と 基本 Google Firebase でできるものは Firebase で行った。

ユーザが触れる部分はモバイルアプリ9割Web1割ぐらいなので、アプリは ReactNative (Expo)、Web は React (+Next.js) で実装。言語はすべて TypeScript で書くことにより、サーバサイドもクライアントサイドも同一コードで動作する部分を増やした。とりわけ Cloud Firestore のデータ表現や操作のコードを一元化できることは一人開発において大きなメリットがあった。なお Firestore の ODM には Typesaurus を利用することで、React や ReactNative (クライアントサイド Firebase SDK) / Cloud Funcitons (Firebase Admin SDK) の Entity, Repository, その他一部ドメインの実装を同一コードで実現でき良かった。

Firestore は慣れてからはテストも書きやすく(ローカルエミュレータもあるしね)、セキュリティルールを絡めたテスト駆動開発ができ、テストをちゃんと通ったコードは TypeScript で書かれているコードであるため、つまりそのまま本番の ReactNative や Cloud Functions でも使える。またセキュリティルールでデータバリデーションもある程度は記述できるので、おかしなデータになることは(意図しないバグ意外は)なく、サーバ側のコードを書かずにクライアントコードのみでパフォーマンスを考慮しなければいわゆるCRUDであるデータ取得・保存ができ、PoC を回し続けるスタートアップ的なプロダクト開発には非常に向いていた。

React (Next.js)、ReactNative (Expo)では CI 環境・テスト、ビルド、デプロイを一通り Github Actions で整えて、iOS アプリのストアアップロード以外はすべて CI で行え(Expo SDK 40 からそれもできるっぽいけど)、無駄な労力がかかる時間コストはそれなりに抑えられたと思う。

またモバイルアプリは Expo の仕組みで本番アプリに対しても簡単に OTA アップデートできるので、リリース後も JS コードの差し替えですむ実装はアプリをリリースせずに反映できるし、OTA で更新できるとバグに対しての品質もアプリリリースを経ずに修正できるため、それほどバグ品質にセンシティブにならなくてもすむ。

コンセプトが固まって、UXやデザインのブラッシュアップが必要になるぐらいのタイミングでデザイナ兼エンジニアの知人に入ってもらってからは、デザインの実装を完全に別ラインで作れるよう、ReactNative のコンポーネント周りを Atomic Design で本体の実装とは分けて Storybook で動くようにつくってもらい、ReactNative のアプリ用UIコンポーネントだけど、Web に Storybook としてデプロイし、Web からも UI コンポーネント確認・利用できるようになった。ReactNative だけど Web の Storybook でもほとんど動かすことができて、ReactNative Web (とそれを考慮して作っている Expo) やるじゃん、と感心した。

今年の自分の技術スキル向上

技術向上には持ち合わせているスキルの成熟と、今までのスキルでは到底できなかったこと(もしくはできるまでかなりの時間投資が必要なる)ができようになる新規技術・パラダイムの会得があるけど、今年は思いっきり前者で、ソフトウェア開発に関わるワークフローの整備やReactNative(JS + Flowtype)でのサービス開発・運用は~前職でもやってきたし、例えば GCP や Firebase 全般を用いたいわゆるサーバレスアーキテクチャ / UX・フロントエンド先行型のAPI設計 / TypeScript 周りの知識習得により短期的にはやれることは広がったけど、パラダイムシフトを得られるような根本的なソフトウェア開発技術や考え方が向上したか、というとただ単にそれらの技術概念とツールの使い方を覚えて使っただけ(やればできるであろうという、自分の中での予想可能な事柄)であるので、そうではないだろう。

ただ現場を離れてしまうと「予測可能な事柄で、自分でもできるであろうがやらない」から「予測可能な事柄だけど、自分ではいつのまにかできなくなってしまった」ことも往々にしてあり得るため、少なくとも Web プログラミング周りにおいてはまだ自分でもできるであろうことが、ある程度実証できたのは良かったかな。

また技術的なスキルよりも、組織に適した方法で PoC を回し続けて得られるサービスについての考え方のほうが、自分の考え方を深める点でも得られたものは多かった。

リモートワークとコミニュケーション

今年、チームビルド的な発見として一番大きかったのは「チェックイン・チェックアウト」を行うことだった。仕事では、毎朝 8:30 にプロジェクトオーナーである知人と zoom でチェックインを行う。毎週定例の複数人が集まるミーティングでは開始時にチェックイン、終了時にチェックアウトを行う。

このチェックイン・チェックアウトは、何か為になることを言ったり仕事内容を報告する場ではなく、今の自分が思っていることをありのまま話す場として使う。今まで自分が行ってきたミーティングや朝会などでは、仕事の進捗報告や仕事の共有事項・技術的なトピック、といった「仕事」に直接もしくは間接的に関係することを話す場だった。リモート前提ならば、非同期で行えること、いわゆる報告・相談・連絡はどれも非同期できるし、そのようにすべきである。同期的な時間に集まる場では、同期的だからこそ得られることをすべきだ。

ただ最初はこのチェックイン・チェックアウトに慣れなかった。さっさと本題に入ったり、仕事の話を進めたいのに、全員が話し、全員が聞く。まどろっこしさを感じた。しかし繰り返していくと、とりわけリモートワークというコミニュケーションの接点が少ないからこそ、その人の背景や人となりを知ることができ、チェックイン時に相手の話に耳を傾けることが好きになっていった。そして人を知ることで、お互いの信頼関係が徐々に高まり、人としても各々の関心度合いが上がるため、チームとしても一体感が生まれる。

管理職マネージメントの一つとして「聞く力」が上げられるのだけど、今までは「仕事について(エンジニアだったら技術的な事柄だったりね)聞く」ばかりしてきた気がする。しかし「思っていることを仕事に関わらず自由に言う&耳を傾ける」という時間を設けることで、様々なことを聞いて知ることができた。日本の仕事伝統文化である(あった)飲み会という古の儀式も同様の効果をもたらしたのかもしれないけど、私はお酒を飲まないし、飲み会の場は好きではなかったので、このような形で徐々に人となりを知れることは良い体験だった。

もともとチェックイン・チェックアウトはU理論ピア・メンタリングの一部とのことだけど、もっとチームではゆるく運用していて、それでも十分良い効果を得られた。

インターネットとの関わり

インターネットを通した情報(SNS、ニュースなど)に過多に触れ合うことは、果たしていまの自分にとって幸せなのことなのか、と意識しはじめて、インターネットとの関わりを減らした。

具体的にはざわめきをさけ、日記をマイペースで続けられるようにセルフホスティング環境に切り替えたり、以前からアプリも入れておらずあんまり見なかった SNS の類、Twitter, Facebook はどうしても必要にならなければ開けないようにしたり(パスワードを1Passwordから消したりね)、日経以外のニュースアプリを消したりした。

必要な情報は受動的に流れてくる情報を受け取るのではなく、能動的に自分から取りに行く(主にフィードリーダーとアンテナ)スタイルになり、ゼロ年代に逆戻りした感じがするが、いまはこの情報との関わりあい方が丁度よい。情報も多様性と単一性、両方をバランス良く得ることが大切だ、と教科書的には言えるのだけど、今は単一性(自分の好みバイアス)に偏って取得している。

写真(もくしはカメラ)が趣味になった

気兼ねなく日記を書けるようになったため、下手だけど記録としてと毎日の日記に写真を必ず載せ初めた。すると徐々に撮影が面白くなってきて、今は写真が趣味、と言えるぐらいには写真を撮っていると思う。計算したら最近は毎日200~300枚ほど撮っていた。

まだ撮りたい写真のテーマは見つからず、今は「こういうフレーミングでこのパラメーターで、この機材で撮ったらこんな写真になるかな」という感じでシャッターを押しているだけなので、そのうち撮りたい写真が見つかると良いな。

ただそのため、「写真」が趣味なのではなく「カメラ(とレンズ)」が趣味の可能性もある。カメラ本体もレンズもついいろいろ買ってしまうしね…。

この一年を振り返って

コロナ禍で世界一周が中断されてしまっての悲しみはあれど、やりはじめた仕事は自分でも様々なことを考えるプロダクト開発で面白く、関係者にも恵まれ、また会社に所属しないながらその仕事をメインにして働く、という体験もできた。やっぱサービス作るの楽しいよなぁ。

当初予定していた世界一周が終わった後は、漠然とまたどこかの会社に所属して働くか自分で会社を作るのだろうなぁ、とも思っていたのだけど、世界をめぐると色んな国で割とちゃんと働いてなく悠々自適に生きていたりする人も多かったりするし、自分はそもそも日本の社会的なレールを踏み外して生きてきたので、あまり仕事をせずに自由気ままに過ごしたり、本当にやってみたい仕事のみをして働いたりするぐらい(その時に自分がそういう仕事でちゃんと成果が出せるなら、という話は前提であるのだけど…)でも良いかなーと、選ぶか・選べるかどうかはさておき、そういう新しい考え方も得られたと思う。

また労働時間も月100時間、というのは毎日1日8時間以上働いていた時からすると、時間だけ見るとだいぶ短いのだけど、ソフトウェア開発に集中して考え取り組める一日の時間には少なくとも自分は限りがあるし、また組織の様々なことをしなくて良いためその時間は除くことができる。プロジェクトのステークホルダーも少人数かつリモートワークのため、横やりも入りにくいので、時間に対する集中度合いは上がったと感じた。

3月4月に思っていた「何となく時間を過ごすのではなく、仕事をしないとな」とモヤッと感じていたのは、きちんと働かないとなんか後ろめたい、という思いだった気がする。いまは徐々にそんな思いは減ってきて(ちょっとは働いているからかもしれないけど)、もっと暇な時間を楽しめるようにもなってきた。

2021年は世界一周が再開できればなぁ、と思いつつもいまの生活の時間も大切に過ごしたい。最後に、好き勝手やっている自分を最大限サポートしてくれている妻や家族に感謝を込め、旅行が中断せざるを得なかったとは言え、今年一年も悪くなかった一年だったなと、一年の振り返りとしたい。


読み返してみると、会社の(評価のための)半期ごとの振り返りっぽい内容になってしまった…。企業に属していると、まぁそういうレポートが必要になるので書いて提出するのだけど、どこにも属していないと自分でそれらを振り返ってみたくなるのかもしれない。そしてパブリックな場に公開するような内容のものでも無い気もしてきたが、まあ書いてしまったので公開しよう。

撮影機材α7C

関連するかもエントリー

2011年振り返り
もう2012年ですが2011年の振り返りをしてみますヨ!!1仕事とか 今年はメインのサイトの裏側を開発しやすくする、ということで開発速度が上がる、不便なものを解決する、と言うことでいろいろやりました。日本最大規模のサイトの開発の手を止めず、様々なものを新しくするには、いろいろな問...
もう2012年ですが2011年の振り返りをしてみますヨ!!1仕事とか 今年はメインのサイトの裏側を開発しやすくする、ということで開発速度が上...
はてな退職しました
7/16 が最終出社日7月末まで有給で休むため、7/16が最終出社ですとなり、はてなを退職しました。はてなブックマークでのチュートリアル機能がはてなでの最後の仕事となりました。はてなに入ってからを振り返ってみると2006年1月にはてなに15番目の社員として入社し、4年7ヶ月はてな...
7/16 が最終出社日7月末まで有給で休むため、7/16が最終出社ですとなり、はてなを退職しました。はてなブックマークでのチュートリアル機能...
世界一周の旅へ
今日から、一年〜二年ほどかけて、世界一周へと旅立つ。先月末で会社は退任し、部屋も引き払った。先日38歳になった。人生の折り返し付近のこれぐらいの歳になると、周りでも健常でなくなったり、不幸にあったりする方が徐々に増えてきて、今は健康でも、これから先はどうなるかは分からないと感じる...
今日から、一年〜二年ほどかけて、世界一周へと旅立つ。先月末で会社は退任し、部屋も引き払った。先日38歳になった。人生の折り返し付近のこれぐら...