2021年、自分がやっていた事、チームとしての変化などを棚おろししておきます。
去年はこんな感じでした:
チーム関連の棚おろし
Amazon Location Serviceを導入し、導入事例としてとりあげていただいた
配達パートナーの位置情報をシステムで管理し、マッチングの最適化等をおこなっていくのはCREW Expressの重要な価値提供の一つです。 そのようなシステムを構築するにあたって、Amazon Location Serviceを選定する事とし、早期からAWSの方々と連携をさせていただいて プロダクションで実稼動させるリスクとコストや中長期的な技術の先行投資という中で導入判断をしました。
また、そのかいもあって、Amazon Location Serviceの事例に掲載していただいたり、Automotive@LoftというAWSの新しいイベントの一回目で登壇させていただく ことができました。
事業の重点が事業自体からチームのスケールの方に比重がかわってきた
今年の10月くらいまでは、本当に市場があるのか、ユーザーからのニーズはどうか、期待されているプロダクトの価値は何なのかといった 事業自体の不確実性が、会社としてかかえている不確実性の大部分でした。 そのため、コストを投下する場所をそういった事業の根本的な仮説の検証の部分のみに絞る事が重要でした。
その状況が、段々といくつかのクライアントと連携し、残念ながらチャーンしてしまったり上手くサクセスできなかったクライアントも発生させてしまいましたが (それは本当に申し訳ありません)、我々のプロダクトとして価値を発揮するために、クライアントにどのようなニーズや環境が必要なのか、逆にどの点はもっと今よりも延す必要があるのか等がより明確になってきました。
そういった事もあり、代表と話すなかで「そろそろチームのスケールのための投資に比重を割いていくタイミングじゃないか」という事で合意しました。
事業の不確実性が段々減ってきてきたので、チームをスケールさせるための投資の量を増やしてもよいフェーズになってきたねという話を代表と合意したので、そういう系の動きや判断を増やしはじめた
— Pocket7878/Azit (@Pocket7878) 2021年11月9日
全画面のReact化完了
WebフロントをRailsから切りはなし、フロントの技術スタックのみで完結させるプロジェクトの一環として 去年末から段階的に新規画面はReact、既存画面も手をいれるタイミングでReactにリライトするようにしていましたが 社内管理画面、Webフロントともに全てコンポーネントはReactで書かれており、react-railsでコンポーネントを設置しているだけという状態までなりました。
今さっきマージしたPRでクライアントさん向け画面のメインコンテンツが全部React化された。
— Pocket7878/Azit (@Pocket7878) 2021年7月16日
ERBはレイアウトファイルと、各画面のReactコンポーネントを一つ置くだけのファイルだけになった
その後、Next.js + Vercelにするとメンテ楽で良いよという話を他社のCTOの方に相談させていただいた時に伺い、 大きめの機能開発の合間に僕の方で技術検証をしていました:
Next.jsに載せかえる時に必要そうな作業を僕の方で調査してた時
フロントを切りだすプロジェクト、試験的にNext.jsの上に各ページのメインコンポーネントを写してみて、色々検証している。react-routerをけっこう活用してるから、next/routerに切りかえるとか、SVGまわりの扱いとか、CORSの設定まわりとかをうまくやれば移行できそうだ!
— Pocket7878/Azit (@Pocket7878) 2021年10月1日
CORSまわりの調査兼、他の技術スタックのキャッチアップも兼ねて Go + Gin + Herokuのバックエンドと、TypeScript + Next.js + VercelのフロントエンドでAuth0の認証をつかって連携させるテストを作った: github.com github.com
あらまし、連携できそうな事が見えてきたので今後は以下のようなステップになるのかとおもっています
- 今の同一ドメイン上でAPIとフロントエンドが動いている状態で、Auth0のJWTによる認証方式に切りかえる
- Vercel上にフロントをNext.jsで切りだす
- Vercelのフロントからも接続できるようにCORSの設定をAPIサーバーにする
- APIサーバー側からフロントエンドは除去
ユーザーに影響がでないように、かつ動いている状態をキープしやすいように段階的に今後もひきつづき以降をすすめていきたいと思っています。
TerraformのCI/CDをGitHub上で完結可能に
今までは私一人がインフラのメンテナンスをしており、属人化して手元でplanやapplyをしてソースコードの置き場としてしかつかっていませんでした。 これはそもそも前述のように事業自体の不確実性が高かったためチームがスケールしやすいように準備をする時間や金銭的、開発的なコストを欠ける事のリターンが無くなってしまう可能性が高かったためです。 しかし、これからはチームのスケールにも比重を割いていくべきだという事もあり、 GitHub上でGitHub Actionを通して
- PRにたいしてterraform planの結果をtfcmtでコメント
- PRにたいしてterraform fmt, terraform validate, tflint 等のチェック
- masterにマージしたらterraform apply
等を完結できるようにしました。
GitHubとAWSの連携はOpenID Connectが提供されるようになり、永続的なトークンを発行する必要がなくなり安心感が増しましたので良いタイミングでした
これで、メンバー誰にでもPRを送ってもらって結果もGitHub上でやりとりが完結できるようになりました。
モバイルアプリに、Swift UI, Jetpack Composeの導入
モバイルアプリの領域は、社員自体から共にはたらいている現在は業務委託のメンバーに裁量を大きくまかせており 私の方は技術のキャッチアップをしながら、リスクの相談などをふまえて会社としてゴーを出すかどうか判断するような形にしているのですが メンバーと1on1をして目標を決めたりしながら、無事Swift UI, Jetpack Composeをまずはアプリの一部に試験導入する事ができました。 導入しようとなってからは早いもので気がつくと最初の導入した画面のPRができていて驚きました。
UIのつくり方がどちらも両プラットフォームの従来の方式はかなり異なりますが、今後の主流の技術になっていくであろう事、 配送という事業の構造上、オプションのサポート等が必要になった時などに画面のコンポーネントの出しわけ等がより柔軟に可能になりそうな等 今後の開発スピードのさらなる向上につながると期待しています。
iOSではVIPERのアーキテクチャを現在採用していますが、Swift UIを考えるとMVVM等のアーキテクチャの方がより扱いやすいだろうなどメンバーと引きつづき議論をしているので 今後も色々ととりくんでいければとおもっています。
レトロスペクティブ, KPT・TGIF会の実施、締め会のブラッシュアップ
スクラムのチームとして、今までは各領域1人ほどの少人数であったり元社員のメンバーばかりだったので 時間帯の都合などを考えて、レトロスペクティブ等をテキストで報告をもらってやりとりをする形で実施をしていましたが、
段々とリファラルで副業でお手伝いいただくメンバーが増えてきたため、私が間にたってタスクを采配していく形よりも メンバーの間で連携をしてタスクのやりとりをできるようになる事がチームとしての成長につながると考え どのタスクを誰がやるのか等をメンバーの間でやりとりをしてもらう形の変更をしました。
また、そういったやりとりを安心しておこなうにはタスクのやりとりだけではなくお互いの人となりを知れたほうが良いだろうという事で オンラインのビデオ通話でレトロスペクティブやKPT、非公式な雑談の場としてTGIF会をチームで実施するようにしました。
シャイなメンバーもいるので当初はすこし不安でしたが、 実際に実施してみると業務では使っていない技術の話や、実は気になっていた会社の話であったり、 「あ、実はこの人にはこんな一面があったんだ」という事を色々と私自身も知れる良い機会となっています。
また、会社全体としての締め会も副業の方も時間の都合が許せば参加していただき、 Zoomのブレイクアウトルーム等を使ってプロダクトの未来や解決したいユーザー課題などをエンジニア以外の部門の方々もまじえてディスカッションしたりする場も設けはじめました。
要件定義を私から切りはなしてチームメンバーに渡しはじめた
専門のPM職のメンバーがいなくなってから、私が要求の吸いあげから要求仕様書におとすまでのプロセスをできるようにする事をトライしていたのですが、 一定、すくなくとも今の弊社のフェーズでは、どんな事をだれとどう考える必要があるのか、 どんなステップで実施すれば認識のズレが発生しづらいのか等が自分の中である程度 型化できました。
そういう事もあり、「このままこれを続けるだけだと、持っているスキルでやるだけ」になりそうだなという事もあり、 私から手ばなしてメンバーに渡していき、私は次の目標を見つけるべきタイミングだなと思うようになりました。
そのため、私自身は半年後くらいの開発計画から重要なものをピックアップし、 それらのまだぼやっとしている要求の重要なパーツを明かにしにいったり、その時の組織イメージから逆算して採用のアクションを打ったり、技術検証をして導入の計画を練ったり 等にメインタスクを移行していく事としました。
だんだん僕から用件定義も剥がしていくステップに入っていて、事業的に大事だよねという内容も、方向性とか要件のヘッドラインは僕が探るけど、具体のところはメンバーに任せていくようにするのを始めていて、それの一つ目の要件定義を水曜にした。
— Pocket7878/Azit (@Pocket7878) 2021年11月26日
単純に組織として要件定義が渡せていくというのもそうだし、オーナーシップ持ってもらえたり、代表と事業目線で直接話してみんなで考える場面としても良かった。僕もメンバーの今まで見たことない一面が見れたりして純粋に楽しかったし。
— Pocket7878/Azit (@Pocket7878) 2021年11月26日
そのため、メンバーにまずはその中で僕がパーツをある程度まとめられていた内容のオーナーシップをメンバーにもってもらって 要件定義を主体的にやってもらうという事を実施しました。 私自身は同席していても、「ここはもうちょっとだけ明確にしておいたほうがよさそう」という所をすこし 「ちなみに、○○観点でxxって大丈夫そうでしょうか」と軽くナッジするのみで、そこを深掘りしていくのはメンバーにまかせていましたが良い要求仕様ができたきがします。
こういう事を実施すると、普段エンジニアとしての側面でしかやりとりをしていないメンバーのプロダクトにたいする観点や意見などが聞けて人を知るという意味でも楽しい場でした。
個人のこと
フルリモートがつづくので少しだけ広い部屋に転居する
今現在の都内の部屋にはもうおよそ6年ほど住んでおり、きっかけは電車通勤が苦手という事もあり徒歩でオフィスにいける圏内に住もうというのでしたが 現在はフルリモートに全社で移行し、オフィスにいく機会もしばらくはそれほど無いだろいうという事で、 リモートワーク用の部屋も確保できる3LDKの物件に都内から離れて移り住む事にしました。
11月頭にそう思いたって、12月に契約開始するというスピードでの実施になりますが、あともうしばらくで荷物をもう部屋から出して運ぶだけという感じになりました。
引っ越しがもうしばらくするとあるので、だいぶ箱にしたんだけど、僕の部屋本の箱x10、あと2箱くらいの雑貨という感じで人間の面積よりも本の方がスペース専有してたなという気持ち
— Pocket7878/Azit (@Pocket7878) 2021年11月26日
引っ越しをして荷物をまとめてみると、自分の部屋に何がおおかったのかわかりますが僕は子供のあいかわらず物理本が部屋の大部分を締めているようでした。 本の一部は今の部屋だと収納の中にしまっており、捜索が都度大変だったので新居では部屋に全てならべておけると良いのですが...
Nikon Z fcを買った
趣味の話になりますが、人のいない所を散歩して写真を撮りにいったりする事をしばらくぶりに再開しました。 Z6を元々持っていたのですが、「今日は撮るぞ」という日いがいにもなんとなく持ちあるけるカメラが欲しいという事で X100Vを買い、レンジファインダースタイルじゃないカメラもほしいという事でNikonからタイミング良くリリースされたZ fcを買いました。 コロナ禍がはじまってから2年ちかく気がついたら2年で合計一ヶ月にもみたない程度しか家からも出ずという状態だったので 完全にウラシマ状態で、「え、このビルなくなったの」とか「え、その話もう2年前?」みたいな事が多発しています。
写真ブログも再開してます:
2022年
年あけからも大きな開発を想定しており、その開発もガツガツすすめていきますが
まずは採用
チームとして人をむかえいれて、裁量をわたして幅広くやっていただく土壌がととのいつつあるので、 実際に人を呼びこみたいという事もあり、採用を強化しています。
プロフィールを読ませていただいて、求めているような働き方やキャリアをちゃんと僕らが提供できるのか、 僕らのチームの空気感とマッチしてお互い苦痛無く働けそうか、その人のバリューを僕らのフェーズで最大限発揮して貰えそうなのかなどを お一人お一人に対して考えておくっています。
もっと気軽でよいのですこし興味をもってくれたので話を聴いてみたいというありがたい方とはMeetyでお話するのが良いのかもとおもいMeetyもつくりました: