![見出し画像](https://assets.st-note.com/production/uploads/images/42000794/rectangle_large_type_2_6795629bbcd9ab0f5c0401e19ada8083.jpeg?width=1200)
2020年のフリーランスでの仕事の振り返り
フリーランスのWebエンジニアになって二年目となった2020年。
自分の成長を振り返るために、ログを残しておく。
前回
良い一年だったか?
一年前と比べて明らかにスキル・経験が増えて成長でき、また契約先でもできる限りのことをした実感はあり、良い一年だった。
この一年で触れた技術や経験したことをざっくばらんに並べると、
・サーバーサイド:Ruby on Rails, GraphQL, Ruby on Railsのアップグレード対応
・フロントエンド:Nuxt.js/Next.js, Typescript, GraphQL, Ant Design, Tailwind CSS
・インフラ:GCP(新しい経験としてはFirebase Authentication, Cloud Datastore, Cloud Taskなど), Azure(特にBot Framework)
・その他:スクレイピング, 検索, Notion, Figma, Sharepoint連携, Hubspot連携など
普通のWebサービスを作る技術はだいぶ成熟したし、スクレイピングや検索、ボット開発などの開発もできて良い年だった。
毎度書いていることだが、自分は色んな現場に飛び込み、そこで必要とされる技術を身に付けるのが向いていて、今年もそれを実現できたのが良かった。
契約した仕事の概要
去年と同じく、週3-4くらいの稼働で4社ほどと契約した。コロナで暇だなと思ったテンションで仕事を引き受けたら受けすぎてしまい、一時期は週7になったり大変だったりもしたが、充実していた。
去年から変わったことというと、リファラルオンリーだった去年に対して、今年はエージェント経由(Findy Freelanceさん)で仕事を1件受注してみた。
既に繋がりが多少あり、仕事の依頼を過去に頂いていた企業で、エージェント経由で仕事をうける必要性は必ずしもなかったが、ちょうど仕事を探そうとしたタイミングで声をかけてもらったので使わせてもらった。
エージェントを通して仕事を受けた所感としては、諸々の交渉や契約は既に慣れているので、他者にお任せして楽できるメリットよりも完全に自分でコントロールがしづらいデメリットを感じたり、エージェント以外で伝手がある層にとっては、仲介料だけのメリットが直接的にあるかと言われると難しいなと思った。
とはいえ、エージェントを通してでしか仕事を受けられないような企業もあり、今回の案件を通して、稼働先だけでなくエージェント側にも信頼関係を作れたと思っているので、今後の案件に繋がればと思っている。
また、担当していただいたエージェントの方は非常に良い方で、面倒ごとは一切なかったのは良かった。
お金の話
今年もありがたいことに結構な単価で各社で雇っていただき、単価への不満は一切なかった。というか、その単価に見合う仕事をすべく毎日必死だった。
自身が成長しているかどうかを図る指標の1つとして、フリーランスとしての単価を毎年上げていくことを密かな目標としているのだが、この面ではざっくり言えば去年比で15%ほど増加したので、まずまず成長はできているかなと思う。雑な指標であることは言うまでもない。
来年も引き続き単価を引き上げていきたいところだが、さすがにそろそろ一人のフリーランスWebエンジニアに準委任契約で(すなわち時給換算で)払える単価の上限値が見えているような感覚はある。例えば今回エージェント経由で受けた依頼については、ここ数年Findy Freelanceさんの案件をウォッチしていた限りではダントツで最高額の案件だったし、少なくともエージェント経由で同じような金額感の案件を探すのは確実に無理で、リファラルでも難しそうな気はしている。
もちろんお金が全てではないので別の軸を考えつつ、とはいえお金も欲しいので、どうしたら単価が上がっていくかは引き続き考えていきたい。
何をやったか
ざっくりとやったプロジェクトを列挙する。
レガシーRailsアプリのリニューアル
稼働開始当初の状況はRails4.0, Ruby2.1, 開発環境/本番環境がEC2, 本番リリースは本番環境でsvn update, 本番環境がdevelopment mode, cssが数万行の単一ファイル, RoRの中にphpファイルがある(??), トップページのレンダリングに10秒かかる(???)、その他ここには書けない諸々のアレな感じの話が無限にあるレガシーRailsアプリを、週3稼働の1ヶ月でRails6.0 / GAEにし、もう1ヶ月で内部の諸々をリファクタリングし、さらにもう1ヶ月でフロントをNuxt.js化してモダンな開発環境にした。自分でも結構頑張ったのではと思う。
※レガシーと書くと悪口のようになってしまうので毎度補足しているが、ここまで事業を支えてきたのはそのサービスだし、モダンな開発体制にしてエンジニア採用をしたいという経営陣の移行に沿ってリニューアルを行なったまでで、既存プロダクトには尊敬をもって接している。
いくつか良かったところ/悪かったところを書き残しておく。
・リニューアルに際して既存の開発チームとの摩擦が生じることが何よりの懸念だったが、既存メンバーや経営陣・PMと丁寧にコミュニケーションしつつ、移行に際しての責任やタスクを全面的に負って推進するスタンスでいったのが結果的に良かった。逆に、まるっと手を動かして推進できる人がいないと、こういうのは難しいなと感じた
・リニューアルは当初はかなりの大手術と思われていたが、特に大きな不具合もなく意外とサクッと移行できた。いつもであればテストを入念に追加しつつ1つずつバージョンを上げていくようなスタイルを取るが、今回はそもそも全体的にコードを捨てる決意をしていたのもあり、テストなしの一発QAでRails6.0/GAE移行を果たした。一般的にはこれはダメな方法だと考えているが、依存Gemが少なくサービス規模も大きくなく、またリスクコントロールを十分にできていれば、結果的にこういうやり方でも問題なかった。
・プロダクトチームらしいチームがないところからのスタートで、チーム作り・採用から関わることになったが、関わるメンバーはモダンな開発の知見させないものの、これ以上なく素直にキャッチアップしてくれる方々で、気持ちよく働けた。素直さはやはり大切だ。
諸々の機能開発(Rails, Typescript)
前職にまたもやお呼ばれして、もろもろの開発をした。何度出戻りしているのか。
・サーバーレスリサイズ: Cloud Function+CDNでURLパラメーターでリサイズするやつ(imgix的なやつ)
・決済機能: 決済関連のフローがなかなかにややこしいサービスなので、退職時にも諸々心残りがあったところ、1年越しで5日でシュッと完全改修できて圧倒的成長を感じた。偉い。
Bot開発
Azure Bot Frameworkを使ってボットの開発をしていた。
慣れれば良いフレームワークなのだが、マイクロソフトのドキュメントが読み辛すぎてとても苦戦した…。
新規Webサービス立ち上げx2
RoR + GraphQL + Typescript + Next.js + Ant Design + Tailwind CSSという最近お気に入りの技術スタックでwebサービス開発をした。
NextはNuxtのようにeasyではなく、現状だとまだベストプラクティスが見えづらいところはありつつも、GraphQLの通信部分からUIコンポーネントまで全てが型に守られた開発をするのはとても気持ちよく、気に入っている。
普通のWebサービス開発については、もはや特に迷うことなく諸々をサクッとクオリティ高く開発できるようになった自負がある。デザイナーなしでの初期開発にも慣れてきて、ミニマム・シンプルで綺麗なUIを作るくらいであれば自分一人で完結するようになってきた。
恐ろしく手前味噌でポジショントークな話をすると、事業開発レイヤからサーバーサイドのロジック、フロントエンド、デザインに至るまで全てを一気通貫で推進し、更に採用や組織マネジメントまで含めて全てのレイヤを統合して最適解を導き、最高効率で事業を回せる人材、いわゆる事業に強いエンジニアは、トライアンドエラーが必須でありスピード感が求められる新規事業立ち上げでは非常に重宝されるし、実際自分としても価値を出せている自負がある。
そしてこれは決して立ち上げ初期だけで必要とされるスキルではなく、事業が成長した際も求められるスキルなのではないかと最近は考えるようになってきた。なぜなら、事業が成長した際に人が増えソースコードが増えていくのは一定仕方ないにしても、不要に生産性を落とすべきではなく、生産性を落とさないためにはやはり全てのレイヤを統合して最適解を考え続ける必要があるからだ。つまりは、事業が大きくなったら優秀なCTOが必要であり、優秀なCTOになりたいなら立ち上げ時の一通りを自分一人でどうにかできるスキルは必要だと思う。
とまあポジショントークを炸裂させてしまったわけだが、これがポジショントークではなく事実になるよう、この方向性でしっかり事業を成功させていきたい。
その他
開発以外の業務も必要とされることは色々やった一年だったが、特に今年は「組織の記録文化」の大切さを各社で説いて回ることが多かった。
一定レベルの開発組織だと記録文化は当然のようにあるものだが、開発組織が未成熟だったり、または開発以外のチームだと記録文化がほとんどなかったりする。
印象的に変化した例だと、(もはやWeb開発が関係ないが)営業コンサルの事業をやっている会社で、コンサルの内容自体はとても良いものの、業務が属人化されているし他社での知見が上手く共有されず、また改善も十分に回っていなそうな会社があった。そこで週次でコンサル内容と改善点をこちらで用意したテンプレートに沿ってドキュメント化してもらい、かつエンジニアのPRレビューのようにそのドキュメントを誰かにレビューしてもらう仕組みにしたところ、見違えるほど共有・改善が行われるようになった。また新人のキャッチアップにも有益なドキュメントとなった。
記録というのは情報共有文化の基盤でありつつ、かつ言語化により思考の整理・改善を行える非常に重要なものだ。
色々な文脈でドキュメンテーションって本当に大事だなと最近改めて感じていて、社内の情報共有文化の基盤であり、かつ文書化の過程における言語化作業で思考の整理、改善が行えるめちゃくちゃ重要なことなんだよな
— nil (@KatsumaNarisawa) May 8, 2020
今後について
6月ごろから受けたい仕事が重なり週7稼働が続いており、充実していて楽しくはありつつも、そろそろ休みたい気持ちでいっぱいなので、来年はのんびりするつもりだ。
…とずっと言い続けてきたのだが、友人とやっている会社の方が面白くなりそうな雰囲気はあり、結局来年もひたすら働いているかもしれない。
とりあえず前回に引き続き楽しくやっております。来年法人化するのか迷い中。
この記事が気に入ったらサポートをしてみませんか?