📚

2021年に触った技術の振り返り

2022/02/11に公開

2021 年はスタートアップに転職しとにかくサービスにコミットし、インフラからバックエンド、フロント、Web/ネイティブアプリなど全方向に一通り触れていった1年でした。
ふと moga さんの2021 年に触った技術の記事を読んで、自分も熱いうちにアウトプットしておこうと思い書いてみました。

開発に関わったサービス

  • リリースしたものでは Web サービス 2 つ、ネイティブアプリ 1 つでした
    • 大まかに紹介すると、オンデマンド投げ銭サービス、オンライン授業サービス、動画ベースマッチングアプリです
    • 基本的にリードされながら0から作りました。
  • 現在まったり個人で開発中のものが一つ

企画から始めるものもあれば、受託でピンポイントで対応するものもあったりと様々でした。
新しいサービスを立ち上げる楽しさを感じることができました。でもやはりコードを書く時間は特に楽しいです。

触った技術

言語

Typescript

  • 主にフロントエンド、(React,ReactNative)で使用していましたが、firebase function でも一部利用していました(今現在 firebase function では go のランタイム上で実行できなかったため)
  • △: 型つけにこだわりすぎて、シンプルなものを複雑にしすぎたり、型制約により柔軟性をなくしすぎたりすることもあって恩恵とともに注意点もあると思った
  • サポートしている組み込み型タイプ(Record や Pick など)を理解するとよりきれいに書ける。(がこれもやりすぎると JS 書いている人からしたら可読性が低くなる抽象化なのかもしれない。)Utility Types
  • 参考になった本: プログラミング TypeScript ―スケールする JavaScript アプリケーション開発

Go

  • バックエンドでは Clean Architecture ベースで終始書いていました。
  • 言語自体がスタンスを持っているのもあり、書きやすくチーム開発に良い言語であると思いました。
  • △: 変数は短いと良いという公式の思想CodeReviewComments #Variable Names があり、やたらと 1 文字の変数名を使っていたのですが、可読性の低下を招いている部分もありました。上記ドキュメントにもあるように説明的にするべきところは説明的にするべきだなと思いました
  • まず公式に近いコードスタイルを頭にいれるのが前提だなと改めて実感。レビュー時も公式ではこうなので。というのは説得力がある。Go に入っては Go に従えとはよく言ったものです。

Typescript の素晴らしさに触れられた一年だったと思います。
ただ、Go に比べてで表現力が高く、書き方やレビューには困ってしまうことも多くありました。

最近はバックエンドも Typescript を採用する企業も多くなっているような印象です。色々メリットはあると思うのですが、やはり型を共有できるのはかなり良さそうだと思いました。

ふとエンジニアの転職市場を見てみると Typescript,Go の組み合わせはかなり強いと思いました。(主観)
特に Typescript はかなり広い守備範囲を持っていていま学ぶべき言語って感じがしています。Go も市場観点でいうと Java 等の成熟した言語よりも比較的人口が少なく需要が高く供給が(比較的)低い印象です。あと開発がしやすい。

フレームワーク

React

  • めちゃくちゃ書きましたがまだまだ難しいです。
  • 最適化、レンダリング、ライフサイクルなどを意識して書き直そうとするとなかなか沼。
  • 「React の歴史は hooks 以前、以後に分かれる」という名言があるように構書き方が違い、その分資料も相対的に少なく注意が必要です。名言の出典は知りません。
  • 特に移り変わりが早く、最新情報にはアンテナを常に張っておく必要はあります。直近ではReact18とか。
  • 書き方に関しては迷った時はAirbnb のコーディングガイドを参考にしていました
  • React ハンズオンラーニング 第 2 版は 2021 年 8 月発売ということもあり参考になる部分が多かったです。

React Native

  • めちゃくちゃ書きましたがまだまだ難しいです。特にユースケースがピンポイントな部分は正解が最後までわからなかったりと苦戦しました。
  • ネイティブの深い部分まで触ろうとすると黒魔術が必要になりました。
  • 熟した技術ではなく資料が相対的に少ない印象です
  • その分、コミュニティは小さいけれど活発な気がしました。
  • 型付けするみたいな軽い OSS コントリビューションも見かけられて、OSS にコミットしながら自分たちで完成度を上げていくこともできるフレームワークだと思いました。

MUI(Material UI)

  • React の UI ライブラリ。
  • デザインにこだわらないサービスや MVP の作成のときにはこれでちゃちゃっと作って良さそう。

GitHub Actions(GHA)

  • 前職でも触っていましたが便利で助けられました。
  • 一旦作ってしまえば同じように他のプロジェクトで使い回せるので学習のコスパいいと思います。
  • 最近気づいたんですが firebase hositng とかポチポチするだけで GHA のコード書いてくれたりと言うような機能があるようです。使ってみましたが便利すぎました。https://firebase.google.com/docs/hosting/github-integration

Terraform

  • 深くは触れてないのですが、作られていると便利でした。
  • GCP の権限周りも適切に考えるのはマストだと実感しました。ガバガバしてて矛盾が起きたりしてしましました。
  • 豆知識:HashiCorp を作ったのは Mitchell Hashimoto さん。Hashi(moto) + Corp(oration)

Bitrise

  • ビルド、テスト配信、ストア公開まで行ってくれてかなり便利でした。
  • が、高い。月1万くらい
  • たまに意味のわからんコケ方する

Docker

  • CloudRun やローカル環境再現に最低限書くくらいの利用。
    • CloudRun でいうと最近では dokcer ファイル必要とせずソースからデプロイも可能になって便利

https://cloud.google.com/run/docs/quickstarts/build-and-deploy/go#deploy

プラットフォーム・サービス

GCP

  • Cloud Run, App Engine, CloudSQL, Storage, functions, Memorystore for Redis など
  • ある程度の金額を利用していたためか GCP のサポートの方から直接ヒアリングなどを設定してくれて運用の悩みとかを聞いてもらえた。スタートアップにやさしい。
  • DB(CloudSQL)はやっぱり高くつくなあという印象。最近は CloudSQL が適切な設定かどうか見てくれる機能もあるようですActive Assist による Cloud SQL の費用最適化
  • 特に CloudRun は mininstance が設定できるようになったりとか、リクエスト処理以外にも CPU を割り当てられるようになったりと使っていうちに、どんどん便利になっていきました。GCP で好きなサービスの1つです。

firebase

  • とてつもなく便利。Web 開発の敷居を大きく下げるサービスだと思います。
  • Hosting, Authenticate, firestore, Storage, Analytics,funcitons, Remote Config, Dynamic Links など提供されてる半分近く使いました。
  • functions がまだ Node.js 14 ランタイムのみのサポートであるのはちょっと不便でした
  • チャレンジ的に利用してよかったのが Cloud Vision API と firebase functions を利用した不正コンテンツ検出です。Storage にあげられたユーザー投稿コンテンツをトリガーにして不適切かどうか判定して通知などの処理を行う構成です。
  • そういえば 2021 年に Firebase JavaSciprt SDK v9 がリリースされて対応がちょっと面倒でした。

https://firebase.google.com/docs/web/modular-upgrade

Stripe

  • Connect, Billing, Payment を主に利用していました。
  • 開発者ドキュメントや機能の充実度にはビビりました。決済手段として GMO Pyament の利用も考えていたのですが、実装のしやすさは天と地の差でした。(具体的には GMOPayment ではサンプルコードが Java と PHP のみだった)
  • GUI も充実していて非開発者にも優しい素晴らしいツールだと思いました。
  • 豆知識: Stripe は現在世界トップのユニコーン企業で暗号資産への参入も公表している。オンライン決済の巨人「Stripe」が暗号資産市場に再参入

SendGrid

  • メール送信する機能が GCP や firebase にないため使うことに。特に困ったこともないけれど stripe ほど開発者にやさしくなく、GCP、firebase でここらへんもサポートしてほしいいなーという気持ち(stripe が異常なほど開発者にやさしいのは重々承知のもと)

データポータル(旧:Data Studio)

  • GCP と連携してデータからダッシュボードやレポートをまとめるツール
  • ポチポチして非エンジニアにもデータを共有できるのは良かったです
  • 簡易的な集計(SUM,AVG とか)はサポートしているものの SQL が必要な部分はちょっと設定が面倒でした

Figma

  • 初めて使ったのですが開発者にやさしいデザインツールだと思いました。(見る専)
  • 個人開発でもちょろっと触ってみたのですが、デザイン考えるのも操作方法も難しく UI デザイン制作がネックになりすぎて途中で断念しました。基礎から学びなおしたい…

Adjust

  • モバイルマーケティング分析プラットフォーム
  • 一番安いプランで利用していたもののしっかり使うならもっと上のプランが適切だなと思いました。自動化ができず手動で出力する必要がありました(泣)
  • 開発向けドキュメントは充実していたが企業が使うことも多く、記事やノウハウの共有は少なかった印象です
  • 契約が一年からという落とし穴がありました。

2022 年に触ってみたい技術

思いつきで色々変わっていくと思いますが、現時点で気になっているものを上げてみます。

  • GraphQL

    • GraphQL * XXX みたいなのが多く見かけられて、触ったライブラリが GraphQL を推奨していたりみたいなこともあったため。個人でサッと作るだけの小規模なスキーマ設定だとそんな恩恵はないかもしれないけど。
  • サーバーサイドとしての TypeScript  (on Node)

    • (自分の中で)Go を使ったバックエンドとどっちが総合評価高いかなーって実際に触って比較してみたい
  • Next

    • ちょっと触っていたものの理解を深めずサービスのほうがクローズしてしまったので基礎から学びなおしたい
  • OpenAPI

    • RESTful API を記述するためのフォーマット
    • OpenAPI ベースに作ってコード自動生成するのはやはり便利そう。
  • Algolia

    • 検索の機能をサービスとして提供する SaaS。
    • タグ検索とかに使いたく調べてたものの実現前にサービスの機能停止になってしまったので。
    • Elasticsearch も気になるけれどその規模ではないかなという印象
  • Solidity

    • Ethereum のスマートコントラクトを書くための言語
    • Web3 の技術にも触れていきたいなという気持ち

おわりに

1つ1つのサービスほんとうはもっとたくさん話したいことがあるのですが我慢してまとめてみました。
これをきっかけに参考になったり、技術について議論できたら嬉しいです。気軽にコメントや Twitter の DM などしてください!

色々触ってみたのの全てにおいてまだまだ本当に未熟です。それでもがむしゃらに触っていくうちにどんどん知識の点が線になっていき、読みすてられていた本を久しぶりに読み直してみると面白すぎるみたいなことがよくありました。「知る」も「やってみる」も結局サイクルで、どっちもずっとやり続ける必要があると思いました。

来年もがんばります。

GitHubで編集を提案

Discussion