ふりかえり2020

お仕事では2019年あたりから Web フロントエンド開発がメインになってきて、個人の関心もそちらに移ってしまった。 今年も専ら TypeScript + Angular で Web アプリを作るのがほとんど。

プライベートでは、code4nagoya/covid19: 愛知県 新型コロナウイルス感染症対策サイト へのコントリビュートをたくさん行った。vue.js とか python、画像認識など得るものが多かった。

フロントエンドもバックエンドもコードを書いているけど、トータルでは TypeScript が 90% くらいを占めたと思う。 今年は C# や Kotlin を書いた記憶が無い・・・。

プログラミング関連

TypeScript

まだ Java や C# の延長線上な書き方しかできていないなあ、と感じる。 class ではなく type をもっと使いこなしたいけど、ガチガチに型プログラミングを学びたい欲求も今のところはないかなー。

Angular

こちらも作りながら知識を深めている感じ。 基礎を身につけてない感があるので、ちょっとアカンかなとは思っているけど、ギョームシステムを作る上ではそこまで苦労してないのもあり。 Andulgar は息をするように RxJS が出てくるけど、これについては Rx.NET や RxJava の経験が活きてる。

Vue.js

これは code4nagoya/covid19: 愛知県 新型コロナウイルス感染症対策サイト へのコントリビュートで初めて触った。 まだ「在るものを触る」くらいしかできないけど、TypeScript 対応にしたり、Vue がどんなものかはなんとなく理解した。

Chart.js

COVID-19 サイトで使われているので、コントリビュートを通して詳しくなってしまった。仕事でも使う機会が発生したし。便利っすね。

webpack

まだなんにも理解してない。 理解してないけど、「デプロイしたら動かん」→ 「はいね webpack ね。」というトラブルシューティングはできつつある。

npm

社内に npm レジストリを立てて、社内用ライブラリはそちらへデプロイするようにした。 初めは Azure DevOps を使っていたけど、今は verdaccio を使っている(verdaccio を立てたのは自分では無いけど)。 .npmrc への認証情報の書き方などの知識は得た。

Python

COVID-19 サイトのデータ収集は Python のスクリプト が GitHub Actions によって定期実行されている。 データソース(まあ、愛知県ホームページ)の仕様がほいほい変わるし、Webサイトの要件も変わるので、Python スクリプトの修正の必要になったため、手を付けた。 Python では BeautifulSoup というライブラリでデータ処理を包括的に行えるようで、「なるほど便利」という印象をもった。

画像認識(画像からの文字抽出)

こちらも COVID-19 サイトから。 とあるデータが画像でしか提供されておらず、仕方なく画像からテキストを抽出して JSON に変換する処理を組んだ。 初めは他の WebAPI を呼び出す形で検討していたのだけど、Python の pytesseract というライブラリで概ね要件を満たせる事を教えてもらい、それを使っている。ライブラリの使い方の然りだが、画像認識のために必要な前処理(クロップ、白黒化とか)や検証の重要性を学んだ。

Mapbox, turf.js

自分はもともと Geospatial なシステム開発に特化していた人間なので、久しぶりに地図関連の技術が必要になって学習している。 turf.js は「昔悩みまくってアルゴリズム実装したなー」というのがなんでもできて感動するし、MapboxV2 のプロプラ化は本当に残念。 アドベントカレンダーは・・・ちびちび埋めます。

プラットフォーム関連

GitHub Actions

COVID-19 サイトの定時データ抽出や、Pull Request のマージ時にビルド&デプロイを実行するなど。 仕事では GitHub を使ってないので GitHub Actions も使う機会が無かったが、GitHub の機能を簡単に呼び出せるのはよいなと思った(PR の送信など)。

Netlify, Jamstack

COVID-19 サイトって、静的コンテンツのみで構成されていて、ビルドの度にコンテンツも含めた形でデプロイされているのですよね。 これは Jamstack の一部かもしれないけど、「サイト自体は全て静的であり、データが変わったらその度にサイト自体をビルド&デプロイし直す」って概念を初めて知ったので、結構な驚きでした。データ更新が頻繁では無いケースでは業務システムでも採用できるなと思いました。

あとは Netlify というか、Deploy preview という機能にも衝撃を受けた。 プルリクエスト毎に、ステージング環境がデプロイされて、実際に試すことができるという体験が素晴らしい。 これも静的コンテンツが全てだからやりやすい(動的コンテンツに依存していると DB や API 側も PR 毎のステージング環境を用意することは難しい)のかなと感じた。

LINE BOT, LINE ミニアプリ(LIFF)

LINE 上で○○するシステムを開発する案件があって。 その際に「すべて BOT でやるのつらいなー、Web アプリに飛ばすか」と想定したところにしったのが LINE ミニアプリ。 LINE上で動作するWebアプリのことで、既にサービスとして提供されているミニアプリもあった。 「LINEポケオ」はその一つで、弁当などのテイクアウトを予約・支払いできるサービスだ。 注文や支払いはLINEミニアプリで行えるし、通知はLINEメッセージが飛んでくるので、モバイルアプリをインストールする必要が無い。 モバイルアプリの欠点(インストールの壁、通知や決済実装の面倒さ)をうまくカバーできて、今後も活かせそうなプラットフォームと認識した。

AWS 関連

CloudFormation

仕事では、Lambda + API Gateway + S3 という組み合わせが多くて。 そして弊社は小さめの業務Webシステムをたくさん開発するので、環境構築が面倒で。 で CloudFormation(CFn)を勉強して、スクリプトで環境をデプロイできるようにした。 これはこれである程度役に立っているが、弊社の構成もバージョンアップして変化し続けているので、それへの追従が課題。

AWS Amplify

上記のような弊社の案件スタイルは AWS Amplify とマッチするんじゃないかなあと思って調べて、実際マッチすると思うけど、活用まで至ってない。 Amplify CLI で、S3に代わる static site hosting 環境と API は構築できると思うので、後は弊社用に調整したら、もっと手間が省けそうだ。2021年のネタのひとつ。

Azure 関連

BOT App

Microsoft Bot Framework v4(node.js) で BOT を開発して、Azure Bot App へデプロイ、LINE と接続して公開、を経験した。 Microsoft Bot Framework と Azure は無関係な(AWS にデプロイしてもよい)はずで、そのあたりの理解が課題。 Bot Framework v2 以来だったが、活きた過去の経験は体感 30% くらいだった。

LUIS

こちらも2年ぶりくらいに使用。 なんか Azure の一部になってみたいで、設定で苦労した。

Azure Database for PostgreSQL

これのおかげで SQL Server を使わずに済んだ。 「フレキシブル サーバー」ってやつを使うと、開発用DBのコストを下げられそうなので、次回があったら使いたい。

働き方改革?

元々フルリモートだったので、COVID-19 禍でも働き方についてはまったく変化なく。 いや、年に2~3回は客先に対面打合せに行っていたのが、今年はゼロになりWeb打合せになったのは小さな変化かな。

2021年も大きな情勢の変化はなさそうなので、自分の興味に忠実に過ごしたいと思います。