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

年越しなので、今年を振り返りつつ、来年の目標を書いてく

就活を終えて一区切りって感じだったので、去年は3月ごろにに前のブログで書いた

2019年を振り返って - KLabs

(´-`).。oO(見返してみると、割としっかり書いててビビる

大学

Covid-19 の影響もあって、大学はほぼオンライン授業になった

3年間のんびり単位を拾ってきてたので、卒業単位が揃いきってなくて授業受けつつ研究進めて…みたいな生活を送ってた

リモート授業は通学時間とか、身支度の時間を他の時間に当てられるのでとても良かった(小並感)

研究

4年生なので、卒業研究に当てた時間が多かった

研究対象は、ゲームAIで、モンテカルロ木探索 を使った3DゲームのAIを構築してる

Unity も触ったことないし、C#も触ったことなかったので、本筋以外のところで結構苦労した(してる)

新年は、まずは研究ひたすらすることになりそう

サクッと終わらせて開発やりたい。。。

会社立ち上げを手伝った

友人が会社を起こしたので色々手伝った

時間的にもスキル的にも厳しいのでさすがにシステム開発はしなかったけど、要件とかデザイン作って外注したり、社内のITっぽいとこ全般やらせてもらった

技術活動

去年から本腰をいれて Web 開発をやり始めたけど、全くの初心者だったので、モノリス開発から初めて Web API を作って…みたいなことをしてた気がする

去年はバックエンドをメインに触ってたので、今年は主にフロントを触った

あと、最近はバックエンド→フロントに責務が移りつつあることもあって、僕の関心がフロントに向いたのもある

フロントエンド

去年もSPAのライブラリ(Vue.js, React, Elm とか)を使ってちょっとしたものを作ってみたりはしていたけど、今年はもうちょっと本格的にフロントを触るようになった

『フロントなんもわからん』状態だったので、結構学びは多くて

  • webpack 周りを自分で書いて環境作ったり
  • CSSをプリプロセッサ通して書いたり
  • (JSではなく) TypeScript を使ったり

するようになった

動けば良いじゃん、からパフォーマンスも意識するようになった

必然的に、create-react-app とか vue create でただの SPA を作るより、SSGこそ正義って感じになった

元々は Vue をよく使ってたけど、

  • Next.jsGatsby.js 等の SSG に強いフレームワーク
  • TypeScript との相性
  • Hooks のおかげで React アレルギーが解消された

辺りが理由で、最近はほぼ React を使うようになった

同様の立ち位置のフレームワークとして、Vue の Nuxt.js でも SSG はできるけど、やっぱり SSR がメインの印象が強いし、SSRをしたい場面は正直なかなか見つからない

SEOの問題はもう解消されている(参考: SPA and SEO: Google (Googlebot) properly renders Single Page Application and execute Ajax calls | by Lucamug | Medium) し、初回レンダリングが遅い問題はむしろSSGのが速いから、あえて Node.js ランタイムを用意する必要があるSSRでってなかなかならない。

一応、

  • ビルドするコンテンツが多すぎてSSGだと時間がかかりすぎる
  • マイクロサービスアーキテクチャで、複数のAPIを叩くからまとめたりするのにBFF層が欲しい

みたいなユースケースは想像できるけど、いかんせん趣味規模の開発じゃあんまり。

とりあえずしばらくは個人開発でも Next.js で SSG して、更新頻度の高い動的なコンテンツは API 叩くなりって形になりそう

バックエンド

今年は、バックエンドはそんなに触ってない

TypeScript を使った体験が良すぎて、漸進的型付け最高かよってなって、Python でも mypy を使うことが多くなった

mypyを使って、Pythonでも型チェックをする | きむそん.dev

なんだけど、

  • 型が間違ってたり
  • サポートされてなかったり
  • そもそも型付けのしようがなかったり

で結局ツラミのが多かった気がする

Django は比較的 mypy の型周りがサポートされてる方だと思うけど、それでもやっぱりしんどかった(もちろんないよりマシではあるんだけど)

そんなこんなで、バックエンドもTSでやりたいなーと思うようになってきてる

とはいえ、やっぱり Django のパワーはやっぱり強いので個人開発だとその恩恵に預かりたかったり。。難しい。

あとは、フロントでTSを使うようになったので、フロントに型付けを提供しようみたいなところに関心が向いた

Django REST framework でシリアライザからTypeScript型定義を自動生成する | きむそん.dev

開発体験はかなり良かった(こなみ)

OSSに初コミットした

VSCode の拡張に求める機能がなくて、プルリクを送って採用されたりした

なんてことない1行コミットだけど、OSSへの初コミットだったので嬉しかった

開発したもの

上に書いたけど、会社立ち上げを手伝ったので、伴って必要なものを作った

  • コーポレートサイト (Vue.js + プリレンダリング)
  • 企業ブログ (Gatsby + Contentful)
  • GASで業務ツール・自動化

辺り

GASはサーバー代いらずでそれっぽいもの作れて楽しかった

趣味開発では、

  • 技術ブログ (いま書いてるやつ, Gatsby)
  • ウェブ通話系のサービス (開発中, Django + Svelte)
  • DeepL 翻訳をラップしたAPI (ローカルで使うやつ、FastAPI + selenium)
  • …etc

を作ってたりする

SkyWay 使うと、WebRTC が簡単に実装できてとても良きだった

あと、部分的に使うだけで React とか Vue のバンドル読ませるのは気が引けたから Svelte を使ってみたけど、結構良かった。こういう用途では積極的に使ってく気がする

来年の抱負

とりあえず、卒論やばいなので2月までは卒論に集中する

キャリアを意識する

基本的には、技術者として価値あるものを世に出していけたらそれでいいかなーと思っているけど、これでご飯を食べていく以上、どういうスキルが価値があって、どうやって生き残っていくみたいなことを意識していかないとなーと思ってる

現在なら NoCode でもプロダクトは作れるし、コーディングするにしても IDE や FW のパワーが強くなってきてるので、とりあえず作ること自体はさして難しくなくなってきてる → 単価が落ちる

じゃあ、なにが大事なのかって話だけど、実際にコードを書いて作る部分というよりも

  1. 規模が大きくなっても保守しやすいシステム設計
  2. ビジネス的なゴールをシステム的解決策に落とし込む力
  3. セキュリティ
  4. パフォーマンス・チューニングができる

辺りの能力が大事になるはず

でまあ、キャリア戦略としては、ある程度固定のメンバーと開発する環境に身を置くなら、どこか圧倒的に得意みたいな分野を持つべきな気がするけど、新卒なのでまずはどれも最低限できるようになるところを目標にしたい

この辺は技術書でインプットすることはできても、実際にアウトプットする機会は学生だとなかなかなかったので、インプットとアウトプットのバランスをとりつつ身につけていきたい

個人開発

ビジネスレイヤーの能力も大事だと思っていて、個人開発だとその辺も自分でできるからやっていきたい

ただ、広告が打てない(カネがない)から、ネットワーク効果に依存しないサービスにしたいけど、それだとそもそも Web との相性が悪い気がする

いっそ、ネイティブとか作るのもありかも。幸い React Native なら学習コストもそんなかからないと思うし

あとは、個人開発だと思いついたときにとりあえず作ってみながらってことになりがちで、結果設計ひどくてあとから泣きたくなるみたいなことが結構あったから、ある程度ちゃんと作るって決めたらトップダウンで考えながら作る癖をつけたい

触るぞー

個人開発(というか勉強)だと、好きに技術触れるから、弱いところを触りたい

  • CDN: ほぼデフォルトでしか使ったことない
  • GraphQL: Gatsby でクライアントとして使うくらいだった
  • インフラ周り: VPS借りてきてアクセスできるようにはできるで!くらい
    • k8sとか触りたいけど、高いよ…
  • DB: ORM通して触ってばかりなので、SQL直で書いたことがほぼない

この辺触りたいなー


結構長くなっちゃった

あと書くのも疲れた

とにかく来年も気楽に頑張ろう