Closed4
log/2020
zennのスクラップ機能が今月になって実装されたので、この2020年技術ログは記憶を頼りに書いていきます。
深層学習開発環境あれこれ
今年はほぼ1年に渡って深層学習を利用したお仕事をしていたこともあり、過去一番このあたりにがっつり取り組んだ年だったと思う。
環境構築
- Dockerで固めてその上で作業する、が一番楽だという状況はこの一年で変わらなかったように思う
- Pipenv系統のツールが生まれたり死んだりしたみたいだけど、Pythonのエコシステムはこのあたりが全く枯れてない上にツールの設計も正直今ひとつという感じのものが多く、最初から全部Dockerに突っ込む方がいいとなっている
- 何かが壊れた時にnode_modulesを消してnpm iすればだいたい解決するnodeエコシステム並の世界が来るまでは、全てをコンテナに閉じ込める生活を続けることになりそうです
Hyの活用
- Hyとは:Pythonランタイムで動くLisp方言
- 2019年の段階で「日本Hyユーザー会」を名乗り、技術書典7で「Hyショートイントロブック」を頒布していた
- お仕事でデータ処理・深層学習パートは基本的にPythonを使っていたけれど、Pythonのつらみが高まりすぎて部分的にHyで書いたりした
- Hyの開発体験は、良くも悪くもメインで使ってるエディタのSpacemacs on Docker次第な感じだった
Docker + Spacemacs
- 前述のHyを触っていた関係で、Docker上でのメインエディタはSpacemacs
- https://www.spacemacs.org/
- Hyを使ってなければneovimでも良かったとは思う
- 基本的には問題ないけれど、処理速度が落ちると辛いことになる(IDE全般はそういうものだけど)
- 特に挿入/通常モードの切り替えが遅くなると、エディタが人間の入力速度に追いつかなくなって破滅するのが辛い
- Hyのエディタは現状Emacs一択なので使っているけれど、下記のようにメジャーな言語ならVSCode remote containerでいい時代になったかもしれない
VSCode Remote Container
- https://code.visualstudio.com/docs/remote/containers-tutorial
- リリース当初不安定だったけれど、12月に使ったところかなり安定した挙動になっていた。実用レベル認定していいと思います
- VSCode / Remote Container / Python で自動補完なども効いていて、VSCodeの快適さにより深層学習のコーディングをする天秤が少しHyからPythonに戻った感じがした
Pythonと向き合った一年
- 案件もありかなりPythonべったりでコード書いてきたわけですが、まあ辛い
- numpy, scipyや各種深層学習フレームワークが存在すること以外に使う理由を見出だせないレベル
- どう見ても獣道なHy使ってる方が苦痛が少なかったあたりで本当にもう
- あまりに辛かったので次はPython抜きで深層学習する方法を考えてる
今年のWeb開発
完全にReact派になった
- 去年くらいまでは「まあVueもReactもそれぞれ違いあるしね〜」というスタンスだったけれど、この1年で少なくとも自分で書くのは全てReact一択という状態になった
- 理由は複合的だけれど、Redux(つらい)を触るお仕事から解放された・Hooksを全面的に使うようになった・TypeScriptに完全移行した結果Vue+TSの組み合わせの地雷を踏んだりした・React系統が筋の良いライブラリ多そう・Vueの設計方針で疑義を抱いたりした・てかVue3使ってる人少なくない…?といったあたり
- あくまで個人の感想ですが、Reactで先進的なアイディアが実装されてからVueが追随するというパターンで定着しているように見えて、じゃあ最初からReact触ってればいいよねという感想に
- ちょっと前まではVueの開発者フレンドリーな点はReactに比べて優位だったけど、最近はReactも十分親切になった
- create-react-appとか
フロントエンド系で良かったライブラリ
react-three-fiber
- https://github.com/pmndrs/react-three-fiber
- Three.jsを使ったアプリを書く機会があり、生で使うとごちゃつきがちな部分がきれいにReact/Hooksで書けて感動した
Framer motion
- https://www.framer.com/motion/
- CSSアニメーションをReact/Hooksで宣言的に記述できる
Tailwind CSS
- デザイナ不在の個人制作で、色々試しながら作るには個人的には最高だった
- 比較対象はmaterial-uiとか
- ただしこれは本当に合う合わないは個人差がありそうなので、合わない人には無理におすすめはしない
- デザイナがいる場合も積極的に使う理由は薄い気はしなくもない
Firebaseの利用
- 「もう全部こいつ一人に任せればいいんじゃないかな」というくらいFirebaseばかり使っていた
- 一般的なWebアプリケーション開発で出来ないことを探すのが大変
- SSR/SSGが必須になるとまた別のつらみが出るのかもしれない
- いずれにしろデータベースと認証まわりを丸投げできる恩恵が大きすぎる
- ただしこれは「スケールさせようとするとどうせSQLもKVSに近いクエリしか書けなくなるでしょ」という思想の人間から見た使い勝手なので、賢いSQL文生成したい人からすると不便な点も多かったりするかもしれない
- 若干複雑なバッチをFunctions triggerで書いたりした結果、これがサーバレス時代のバックエンドか〜などと思ったりした
TypeScriptの型と表現力
-
「実践TypeScript」を読んで、それまでの「JSに型が生えた程度のもの」という認識を改めさせられた
- 入門向けあるあるっぽい感じの書籍名をしていますが、ほぼ全編TypeScriptの型の話しか書かれていない俺ら向けの本です
- Union typesでかなり柔軟で書きやすいとか、Conditional typesやUtility typesなど型で遊べる道具がいつの間にか揃っていたことを教えられました
- JavaScriptが大統一言語になりつつある現状を見て「マジかー」となっていましたが、「TypeScriptあるならもうそれでいいか」という気持ちになるレベル
- プログラミングスタイルも変わってきた
- まず type XXX = {...} を並べてから中身を埋めるのが基本動作
- 状態を持たない関数と型でなんでも表現しようとする
- これは部分的にはReactのFunctional Componentsの影響もある
- これまで個人的に一番使いやすかったC#を超えていると感じており、やっていきたさが高まっています
- VSCodeと合わせてMicrosoftに囲い込まれるだけの人生
このスクラップは2021/01/28にクローズされました