フロントエンドエンジニアとしてフリーランスになって半年の振り返り
昨年の10月頃にフリーランスになって半年ちょい経過したので近況報告をかねて振り返り
最初はしばらく無収入で遊んで暮らそうかなぁとも思っていたんですが、幸いにも良いご縁をいただいて結局バリバリお仕事させていただいております
株式会社 iCAREさん
企業の健康経営をITで実現するヘルステックベンチャー
サービス自体はモノリシックな Rails アプリケーションですが、 GraphQL を全面的に採用して、フロントエンドは Vue2 + Composition API を使った中々モダンな構成になっています
こちらではアドバイザーという立ち位置で、開発環境の整備やメンバーの技術力向上なんかの足回りに携わらせていただいています
Webpacker 剥がし
最初に声かけてもらったきっかけがこれなんですが、ヘイトが溜まりに溜まっていた Webpacker を剥がして pure な webpack に移行するというお仕事
数十人レベルのエンジニアが継続開発しているプロダクトでこれやるの、結構難しかったんですがいろんな人の協力をいただいてようやく5月に完遂。 無駄な Rails の知識も増えました
これについては詳しい手順含めてイベントでお話しする予定です
DevOps的なお仕事
CI 周りのお困りごとを解決したり、GitHub Actions の導入したり、ビルド時間の改善をしたり、謎のエラーの対応したり、なんならインフラ+フロントエンド起因のトラブル対応したりしてました
iCARE にはつよつよインフラエンジニアの uro3 さんが居るのでいろいろお願いしながら仕組み化していってる最中です。webpacker が剥がれたこともあり、 ECR 使ったりとか色々やれることが増えました
メンター的なお仕事
これまではマネジメントの一環としてのコーチングとかメンタリングはやっていたんですが、 iCARE さんでは純粋にメンバーのスキルアップにフォーカスしてサポートさせてもらっています。自主的に開催されている勉強会に参加してコメントしたりとか、メンバーから疑問や困ったことがあれば調査してフィードバックしたりとか。また、フロントエンドメンバー間ではペアプロも活発でチーム横断でいろんなメンバー同士でのナレッジ共有ができています
ちょっと無責任かもしれないですが、事業コミットとは切り離された状態で純粋にスキルや仕事の仕方を継承するみたいなのは中々できる機会がないのでやりがい持ってやらせてもらっています
デザインシステム・ドキュメンテーション・アーキテクト
ちょうどメンバーが増えていて( 4〜5人が半年で 10人に!)、コードの標準化やら意思疎通やら業務効率あたりの問題になってくるタイミングだったためドキュメンテーションにもコストをかけました
デザインシステムについてはアウトプットとして形のしっかりしたドキュメントを作るというよりも、フロントエンドとデザインの橋渡しとして、まずはカラーコードやフォントなんかをデザイントークンとして変数化(その過程で body にかけられてるフォント変更とかしたんですが地味に重い作業だった)から着手。共通コンポーネントなどもあったのですが、あまり情報共有はされていなかったので addon-docs を導入してドキュメント化も進めています
Storyshots 以外のライブドキュメンテーション的な意味での Storybook の活用はどこかでシェアできる機会があったらいいなと思っています
デザインに関わらない部分でもスキーマ駆動へのお気持ち表明をしたり、GraphQL実装の手順を書いたり。「よく分からないけどこうやると動くから」みたいになっていたのをドキュメント化したりしていました。 iCARE さんはドキュメントを大事にする文化がちゃんとあるので安心してドキュメントできるのがいい所。直近では TsDoc の導入が完了した所です
あまりドメイン知識に入り込んだことはやっておらず、純粋に足回りの改善をずっとさせていただいています。スタートアップだとどうしてもプロダクト開発が最優先になってしまい、足回りの部分が後回しになりがちですが、その辺りを専任に近い形で好き勝手にやれる体制で依頼をいただけているのはすごい勇気のある判断で、本当にありがたいと思っています
株式会社Legalscapeさん
リーガルリサーチと呼ばれる法律に関する調査業務の効率化を目指すリーガルテックベンチャー
正社員8名というど真ん中スタートアップなんですが、こちらではフロントエンドの専任がいないということで、ガリガリとコードを書く仕事をさせていただいています。 Nuxt + Vue class decorator / Open API というベーシックな構成
ちょうど6月に正式ローンチされたのですが(プレスリリース)、新機能から既存機能のブラッシュアップまで、かなり広範囲に担当させていただきました。やりたいことだけが決まっていてエンジニアがそれぞれの判断でプロダクトを作り上げる学習と実装の無限ループ。ここまでのスピード感は流石に経験したことが無かったので楽しく仕事させていただいています
速度改善
コア機能に文書閲覧機能があるんですが、こちらの速度改善を担当。速度改善のためのコンポーネント分割から、データ処理のフローのオーバーホールまで、もろもろ行って誰が触っても早くなったと言ってもらえる所まで持っていきました。後述のリファクタリングと一緒にできたのもよかった
これまで読み込み時の速度改善はたくさんやってきたけれど、操作時の速度改善はあまりやる機会なかったので貯めてきた知識をフル活用できて楽しかったです。普通は API 側に制約があるもんなんですが、リーガルスケープさんはつよつよエンジニアが集っているので「これ作って欲しいです」みたいなのどんどんサーバ側で実装してくれるという快適な環境でした
リファクタリングと新規開発の同時進行
もともと 1ページ 1コンポーネントくらいの勢いで書かれていたので、上記の速度改善とパーツごとのコンポーネント化を並行して実装。また、宣言的に書かれていたデータ変換処理をリアクティブな処理に変更。ほかにも Repository パターンの実装とか Feature Toggle の集約とか、ぼくが触る前と後で別アプリケーションってくらいに改造させてもらいました
リファクタリングはそれを目的にするよりも、サービスの学習の一環としてやるのが一番効率がいい、と思っていたのでそれが実践できたのは学び
毎週変わる優先度とスクラム(?)開発
Azure DevOps → Notion Board → Linear と半年の間に 3つの issue tracker を乗り換えながら活用。変更のたびに業務の進め方が効率的になっていくのは学習スピードの早いスタートアップならではですね
つよつよエンジニアばかりなので、 CI/DI がきちんとインテグレーションされていて、 DX に関していうとこれまでのキャリアの中で最強かもしれない
正式版リリースが完了したものの、改修するべきところや新しく入れたい機能も無限にあるようで、今も引き続きバリバリコード書いてます(でも少し落ち着いた)
自己啓発的なことも一応やってます
本を読む時間はちょっと増えたんですが、予定よりもずっと少なくて積読の増加スピードがやばいです
唯一やっている自己啓発は Rust ( LT とかしました)ですが、キャリアには繋がんないですよね
他にもフリーランス期間中にやりたかったものがいくつかあるのですが、ようやく着手できるようになったかな、、、という感じ。どうしても時間の使い方がだらしなくなりがちなので自分を律しないと、、、
趣味的な話ではパーソナルトレーニング始めたり、アラビア書道始めたり、ダーツ始めたり、カホン買ったり、、、増えたり減ったりして趣味に使う時間はあんまり変わってません
まとめと宣伝
他にもちょいちょい細かいお仕事や細かくないお仕事もさせていただいています
どんな現場に行ってもそれなりに立ち上がりは早く、明確な指示やアサインがなくてもやるべきこと考えて動ける感じなので、マネージメントフリーっていうのは強みなのかな、と思っています
よく言われる「全体の20%の稼働で80%の成果をあげている」っていうのも強く感じていて、一番成果を出せる部分にフォーカスして取り組めているので、一つの組織にフルコミットするのの150%くらいのアウトプットを出せているイメージ。エンジニア個人としては達成感も感じられて成長もできているので全能感は半端ない(笑
ずっとフリーランスのつもりはないですが、今のコロナ禍で先行きが見えない状態というのもあり、もうしばらくは今の体制でゆるゆるとお仕事させていただこうと思っています
ミートアップ
株式会社iCARE さんでやった取り組みについて、7月にお話させていただく予定です
【iCARE Dev Meetup #23】ヘルスケア×HRテックSaaS Carelyを支える技術 - connpass
主に Webpacker を剥がす話でかなり網羅的に話せると思うので良かったら聞きに来てください。アフタートーク的なのもあるらしいので直接お話ししたりもできるかもです