2020年の振り返りと2021年に向けて

2020年も終わるので毎年している振り返りをしたいと思う。

2020年の生活について

フリーランスでの常駐先は今年の2月からコロナの影響で在宅ワークに切り替わった。当初は1~2ヶ月ぐらいの処置だと思っていたが、現在も継続している。
もともと在宅で仕事が出来るように整えていたので、スムーズに移行できたが今年目標としていたもっと交友関係を増やすのはこの時点で難しくなった。

しかし、通勤が無くなったことで時間と体力の消費が少なくなったので常駐以外での活動時間は増やすことが出来た。この活動についてはまた下の方でで書く。

iOSの仕事について

まず個人アプリをリリースすることが出来たので、理解の浅かった証明書及びアプリ申請についての経験を積むことが出来たのは収穫だった。今思えばiOS13以上にしてSwiftUIで構築すれば良かったのかもと思うこともないが、色々とハマりそうだったのでやはり良かったと思う。

常駐先の仕事でも引き続きiOSアプリの開発をしている。そこでは音声通話やまだリリースしていないがリアルタイム系の処理を使った実装をした。こういうスマートフォンのハードウェアを使った開発はWebと違っているので楽しかった。また、Reactive Swiftの導入、テスト分割、ドメイン層での新しいアーキテクチャの導入をした。最初はあまり自分の意見を入れるよりも堅実に開発していたが、今年からは積極的に提案をするようにした。

改めてWebからiOSに鞍替えして良かったなと思える内容だった。 また週5でフルに働いた年なので意外といけるなと実感した。

個人的な活動

実は8月から友人を誘って2人でサービスを作っている。今年の後半はこの作業しかしていない。きっかけはテスト管理ツールを作った時に一人でサービスを続けていくのは難しいと実感し、また今年の前半にこれまでフリーランスでの活動を思い返していたところ、人を巻き込んだことをしていないなあと思ったことだ。
もちろん、一人でやった方が気楽だったり、相手より作業量が多いことで悶々とすることもない。ただ、それは結局自分で全部やった方が早いということと同じなので、いつまで立っても仕事のやり方が変わらないのでスケールしないし、より難しい目標を超えるには誰かと組むしかないだろう。

で、改めてサービス内容を一言でいうなら、「toB向けの情報共有の動画化」を目指す内容。例えば、社内ドキュメントを作成する時に今は文章で作成しているが、映像・音声で置き換えられないのかということ。

例えば社内ドキュメントを作成する時に注意しないといけないのは、誰に向けて、どのような構成で伝えてるのか、ドキュメントのレイアウトはどうするのかなどなど実は色々と考えることが多い。というか社内ドキュメントをきっちり書ける人というのは想像以上に少ない。その中で録画して共有してしまったほうが作成者にも視聴者にも良いケースは沢山あるかなと思っている。
ただ、これ以上書くと今回の記事の内容から脱線するのでまた改めてリリースした時にもっと詳細に書こうと思う。

技術力の向上について

あんまり技術力の向上については自分の中で優先順位がもうあまり高くはない。ただ、毎年書いているので少しだけ書いておく。

先ほどのサービスではサーバーサイドはKotlin・Spring Bootの構成で、フロントはTypeScript・Reactの構成で書いている。フロントに関してはあんまり言及することのない鉄板構成だからサーバーサイドだけ選択した理由を書いていく。

言語として最終的に迷ったのは、Elixir・Scala・Kotlinである。

実装スピードとしてはElixirが一番経験もあるし速いのだが、今回は環境をGCPに決めていたい。そうなると、GCPではJava・Node.js・PythonC#PHPRuby・GoのSDKが公式で提供されているので、この時点でElixirは不利であるため除外した(SDKを使わなくても実装できるが、それならGCPを選択する意味が無くなる)

この時点でJVMの環境で動かせるScalaとKotlinが残った。
気持ち的にはScalaの方がやりたかったが、Kotlinの成長性とScalaと比較しての学習コストの低さを考えるとKotlinの方がいいかなとなった。

また言語選定と同じくらいフレームワークの選定は重要になる。Kotlinにはデファクトスタンダードフレームワークが無いのでJavaで書かれたSpring BootとKotlinで書かれたKtorが候補に上がった。ただし、KtorはKotlin純正のフレームワークだがマイクロフレームワークに属するので今回の選定には少し力不足に感じたので、情報量も多いSpring Bootに決定した。
Spring Bootで開発してそこまで不満は現状ないが、そもそもKotlin純正のフレームワークではないのでJavaのコードに接することが非常に多いので、Spring BootならJavaでも良くないと思わなくもない(Kotlinの方が簡潔に書けるケースが多いので別に駄目ではないが)。 Spring Bootで良かった点は強力なDIの機能。さすが本家であるので、今まで使ってきたDIとはレベルが違う。

あと少し脱線するとなぜRubyを選ばなかったのかについても書いておきたい。もともと静的言語の中で決めようと考えていたので、Rubyはわりと早い段階で消えた。
ただ、そうでなくてもRubyは選ばなかったのかなと思う。理由として、Rubyを選択するとまあ必然的にRailsフレームワークを選定することになる。ただ、これから新規にサービスをしたい人がRailsを選択するのは個人的には微妙だと感じている(個人開発は除く)。
色々な企業をフリーランスで経験して実感したのはRailsを選択するとかなり人員の採用面で大変になるということだ。Railsを使用している企業はスタートアップ・大手含めてかなり多い。その中で新規サービスをRailsを選択してしまうとそれらの企業との技術面での差別化が難しくなり、残るのは知名度と待遇差だけである。そうなると新規サービスの企業はかなり厳しい。

ただ、Ruby3に並行・並列について機能が追加されたのでいつか機が熟したら触ってみたい気もしている。

2021年の目標

直近は今作っているサービスをβ版リリースまで持っていくこと。その上で改良して来年中に正式版リリースまで持っていけたらいいなと思う。 ただ、サービスをリリースすることではなくて、ビジネスとして落とし込むことが重要なのでそこにつけては目処を何かしら付けたいと考えている。 また、iOSについてもコンサル的な役割で参加して欲しいという依頼も来ているのでひょとしたら並行して働くのかもしれない。

まとめ

今年の前半戦はあまり良くなかったが振り返ってみると、フリーランスなって一番変化があった年になった。
久しぶり共同で何かを作ることになったのは楽しい面もあり、大変な面もあるというのが率直な感想である。とはいえ自分以外に誰かに相談できるというのはプラスに働いているので、今後このサービスがどうなろうとも続けていきたいと考えている。

おわり