2019年俺的技術トレンドを振り返る 〜 上期

# 今年書いた記事の振り返り。前半戦。

株式会社ピー・アール・オーのアドベントカレンダー２日目です！よろしくお願いいたします！

今年も色々な技術に挑戦いたしました。様々なミドルウェアやフレームワーク、ツールを試した記録をまめにQiitaに上げておりましたので、これらを振り返りつつ２０１９年の**俺的技術トレンド**を掘り起こしていきたいと思っております。

## 1. コンテナ〜 今年は昨年末からのWSL+Docker構築で開幕

今でもストックが止まない記事、WSL+Dockerの環境構築に奮闘した記録[^1]で今年の幕が開けました。
Windowsで、WSL経由で、Linux版のDockerがそのまま動かせる、ということで大興奮でした。
しばらくJava6のエンハンスという"とて〜もレガシー"な案件で失われてしまったコンテナ技術に再入門した瞬間でしたね。そしてChef+Vagrant とは完全にお別れしたのでした。

[^1]: [[2019年1月版]WSL + Ubuntu で Docker が動くっ！動くぞコイツッ！](https://qiita.com/koinori/items/78a946fc74452af9afba)は12月31日〜1月2日にかけて作成されました。ゆく年くる年。

早速、Docker "ホスト"の管理ツール "Portainer"のインストールをいたしまして[^2]、こちらもいくつかのバージョンをトライ＆エラーする、という事態に陥ってます。やはり "WSL2.0" が出る前でしたので色々、不安定だったようです。
[^2]: [[2019年1月版]WSL + Ubuntu + Docker で Portainer](https://qiita.com/koinori/items/ca18e9092d72b4c5fb33) 意外と動かなくて大変だった。
で、WSL + Docker は早々に見切りをつけて、軽量 k8s の k3sに挑戦いたしました[^3]。この k3s で本格的にk8sの入門ができたのでよかったですね。ただ、初回はコマンドの打ち間違いでダウンロードに失敗していたため、Minikube[^4]も試してみました。
[^3]: [【2019年2月末版】最軽量K8sのk3sを試してみた。](https://qiita.com/koinori/items/d008c9d4c8ee98b240af)、[【2019年3月版】k3s 再挑戦](https://qiita.com/koinori/items/c97812442bc3fe430585) k3s は本命です。
[^4]: [【2019年3月版】MiniKube で Piping-server](https://qiita.com/koinori/items/48baf6c842e464d888f9)。Minikube簡単なんだけど、スタンドアローンじゃねぇ。。。


`kubectl`　コマンドに慣れたのはよかったのですが、やはりノード単体では k8s のメリットが薄く`docker-compose` で十分になってしまうので、複数台のk8sノードを揃えないとね…ということでマシンを数台用意していただきました。しかし、本家k8sはそもそもマシンが６台以上無いとダメなので・・・k3sがあってよかった。。。

ちなみに "dockerdのコンテナ" 以外のコンテナも色々試してみたかったので `LXD` についても試してみました[^5]。LXC は動作も軽くてちょっとお気に入りだったのですが、`docker-compose` コマンドに相当するもので使いやすい環境がなかったで結局、`docker-compose`が開発にはいいじゃんと。
[^5]: [【2019年3月版】Ubuntu18.04でdockerが動くlxcコンテナの作り方](https://qiita.com/koinori/items/3063bc5091661e45508f)と、[【2019年4月版】LXC/LXDでホストのディレクトリをコンテナ内にコピーする](https://qiita.com/koinori/items/ea38d673f9dad15e965c))
そして何より "VSCode Remote Container" の**正式版がリリース**されて開発環境は **VSCode + Docker Container** で、という流れが決定的になりました。これが決定打となり、LXDコンテナはお蔵入りとなってしまいました。

そして今年のもう一つのエポックとして4月ごろから案件で実際に **GKE** を構築するというチャンスに恵まれたため、**本物のK8s** を構築いたしました。k３sやらMnikubeやらUbuntu専用のmicrok8sも試していたので **`kubectl`は余裕** でした。しかし、GKEというかクラウドのk8sは**ゼニでリソースを買う**ということにとても神経を使いましたね。ちょっとのミスが実際に金額にハネる、というとても緊張感のある中で構築作業を行っておりました。ま、GCPのコンソールからWEBのUIでポチポチできるので即座にクラスタ削除ができるので、安心感はあるのですが。。。このあたりの感覚はとても身に沁みましたね。。。**とても手作業ではやってられん**、ということに。そして導入した "**Terraform**" でした[^6]。

Terraform もなかなか開発途上だし GCP Provider も開発中だし GCP は仕変がアグレッシブだしでなかなか安定しませんでしたが、"クラウドのインフラがコード化できる"というのはとても大きかったですね。まさにインフラの冪等性。なんども、何度でもトライアンドエラーできる。(Cloud SQLはインスタンス名に同じ名前使えないけどね！)
これは Terraform というツール云々ではなく、GCP との戦いでした。(後のTerraform 0.11→0.12のバージョンアップもなかなかしんどかったけど。)

[^6]: [【2019年4月版】Terraform+Spinnakerがよくね!? → 闇が深い。](https://qiita.com/koinori/items/3e1988de28473e328251)、[【2019年4月版】Terraform + GKE でのいろいろ小技メモ](https://qiita.com/koinori/items/7a87d54923d6133a4af1)、[【2019年6月版】Terraform+Spinnakerがよくね!? → もはや沼。](https://qiita.com/koinori/items/ff3579faf571c9b51bb5)などなど

そしてこの GKE で立ち上げたのが Spinnaker でした[^7]。この直後に GKE のサービスとして Spinnaker が追加されたので複雑な気持ちでしたが、再度 Halyard の設定からやるのはとてもじゃないけど無理なので見送りました。何より、GKE のサービスって、Terraform 対応してないんじゃないかな？

[^7]: [【2019年4月版】docker push -> Spinnaker -> deploy on GKE](https://qiita.com/koinori/items/017d74aa0bffa5ec9f44)

## 2. Firebase と プログラミング言語

レガシー開発から解放された私に待っていたのは "Firebase" での開発というそれまでと180度違う環境での開発となりました。Firebase はサービスの総称で中身はWEBのホスティング、Firestore、Functions などのサービスをワンストップで提供してくれるトータルバックエンドサービス？です。Java6付けの世界から急に「なんだそりゃ？！」な世界に突入いたしましたが、開発環境が Node.js + TypeScript(Angular 7)でまさに「マジすか？！」という状態でした。(Javaの安定した開発環境に慣れると Node.js と npm/node_modulesの環境は不安定でしょうがないですからね。)
そんなわけで、Angularに入門したわけでございます。ただ、`ng-cli`の使い勝手はなかなか悪く無かったですね[^8]。
[^8]: [[2019年1月版] angular-cliが神過ぎて涙が溢れているのを止めないで](https://qiita.com/koinori/items/d6ec3a15f69b8680245a)
また、Angular をクライアントとして node.js で動く GraphQL サーバーの Apollo Server を試してみたりもしました[^9]。GraphQL にも本格入門しましたね。

[^9]: [【2019年2月末版】Apollo + Express + Angular で GraphQL Pub/Sub実装 〜 Subscriptionちゃんとね](https://qiita.com/koinori/items/56dc25d72bcdebdc4e78)

Firebase の周辺技術もなかなか深いのですが、その中でもスマッシュヒットが Headless CMS の Flamelink でした[^10]。
Firebaseにコンテンツエディタの機能をSAASとして追加することで自分の Firebase をヘッドレスCMSに出来てしまう、というなかなかメタメタなサービスですね。よく思いついたなぁ。。

[^10]: [【2019年5月】AngularFire で Flamelink を。](https://qiita.com/koinori/items/ef3f67603b2afecaac29)

また Firestoreを管理するツールの一つとして、Jupyter notebook を使ってみたりもしました[^11]。
Firestore についてもいろいろ知見が溜まりました。そして決して**ゴールなんてないんだ** ということもわかりました。
[^11]: [【2019年5月版】Firestore のデータメンテって Jupyter notebook (Python3) 使うとめっちゃ楽](https://qiita.com/koinori/items/4e6b8768f0e0645f65b6)
TypeScriptのトランスパイラなしで動くエンジンとして `deno` を発見いたしましたのでそれも試してみましたね[^12]。
確かに TypeScript が"大本命"の一つであることは間違い無いと思います。

[^12]: [[2019年2月版] deno の使い方](https://qiita.com/koinori/items/456673d38034af8f09d8)

TypeScript 以外の言語としては、Julia[^13]を試してみました。これは案件で使ってみたいけど、ついてこれるメンバーは居ないんだろな・・・
[^13]: [[2019年2月版] Juliaが1.1になっていたので触ってみるか](https://qiita.com/koinori/items/bdb01ec789d5e49aed0f)、[[2019年2月版] Julia + Jupyterで回帰分析してみる](https://qiita.com/koinori/items/43e0ffa98a91d6915a50)
また、Angular + Firebase の "ネイティブ化" ということで NativeScript[^14]、Flutter[^15]にもチャレンジしてみました。
Firebase + Angular を軸にいろいろ広がりました。

[^14]: [【2019年4月版】NativeScript+Angularで感じた新時代](https://qiita.com/koinori/items/aa2a3e124331117704db)、[【2019年5月】{N} + ng + Firebase : 準備編](https://qiita.com/koinori/items/3b2787dc22925cf63590)
[^15]: [【2019年5月】無理やり flutter web を動かしたメモ](https://qiita.com/koinori/items/9d626d2f5d0d00af2bcf)

ちょっと違う軸ですが、Scrapy[^16]にもトライしてみましたね。Jupyter notebook はこれまでローカル使っていたのですが、実はこれ、Microsoft Azure notebook を使ってました。クラウドの Notebook、なかなか悪くないです。

[^16]: [【2019年5月】Scrapy の自作パイプラインで Firestore に結果を叩き込む](https://qiita.com/koinori/items/6a71bb7f68443f065311)、[【2019年5月】Scrapy の自作パイプラインで Cloud Storage に画像を叩き込む](https://qiita.com/koinori/items/e7835220e5dadedde206)

## 3. ブロックチェーン関連

今年のもう一つのエポックとしては "ブロックチェーン" ですね。巷ではいろいろ話が出てましたが実際の"開発"という面でちゃんと取り組んだのも今年からです。

ブロックチェーンについての棚卸し[^17]から Ethereum での開発[^18]、Ethereum のサイドチェーン Loom での実験[^19]、そして Hyperledger の各種ブロックチェーン(Fabric[^20]、Borrow[^21]、Indy[^22] )を試してみました。
Hyperledger Borrow は Ethereum のスマートコントラクトを直接、実行できるようにする、というアグレッシブなプロジェクトですのでチャレンジした甲斐がありましたね。FabricのチェーンコードでSolidityが動くってのはわけわからんです。

また Indy はコアがRustでコンセンサスのネットワークが Python という変態構成のブロックチェーンでなかなか苦労しましたが Rust/Cargo にも無事に入門できたので大変良い勉強になりました。
 
ブロックチェーンの技術はやはり各種技術の最先端が詰まっているので時々は触れてみる必要あり、ですね。

一旦、ここまでといたします！

[^17]: [【2019年2月版】"次世代"ぶろっくちぇーんっだって！何(あん)だって？](https://qiita.com/koinori/items/331ecd60e99d0e4eb4b9)。
[^18]: [【2019年4月版】イーサリアムのテストネットで初めてのオリジナルトークンを公開してみる](https://qiita.com/koinori/items/ceb97858d378d5a3daf2)
[^19]: [【2019年3月版】LoomSDKのサンプルを動かしてみる](https://qiita.com/koinori/items/5b94fbcd558945165f94)
[^20]: [【2019年3月版】Hyperledger fabric の EVM を試す。～ Hyperledger Burrow入門 ～](https://qiita.com/koinori/items/a76bc513459f6d69fa34)、[【2019年4月版】Solidityでビルドしたバイナリがちゃんと動くかHyperledgerのUTでデバッグしてみる。](https://qiita.com/koinori/items/ba3a049f82b4d5e39118)
[^21]: [【2019年3月末版】Hyperledger Burrow ちゃんと入門](https://qiita.com/koinori/items/f4c1eaa1eec6c6e06296)
[^22]: [【2019年3月版】Hyperledger Indy 事始め](https://qiita.com/koinori/items/4c97098754c7d78a3ea6)