📚

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

2022/02/11に公開約6,300字

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などしてください!

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

来年もがんばります。

Discussion

ログインするとコメントできます