今年書いた記事の振り返り。前半戦。
株式会社ピー・アール・オーのアドベントカレンダー2日目です!よろしくお願いいたします!
今年も色々な技術に挑戦いたしました。様々なミドルウェアやフレームワーク、ツールを試した記録をまめにQiitaに上げておりましたので、これらを振り返りつつ2019年の俺的技術トレンドを掘り起こしていきたいと思っております。
1. コンテナ〜 今年は昨年末からのWSL+Docker構築で開幕
今でもストックが止まない記事、WSL+Dockerの環境構築に奮闘した記録1で今年の幕が開けました。
Windowsで、WSL経由で、Linux版のDockerがそのまま動かせる、ということで大興奮でした。
しばらくJava6のエンハンスという"とて〜もレガシー"な案件で失われてしまったコンテナ技術に再入門した瞬間でしたね。そしてChef+Vagrant とは完全にお別れしたのでした。
早速、Docker "ホスト"の管理ツール "Portainer"のインストールをいたしまして2、こちらもいくつかのバージョンをトライ&エラーする、という事態に陥ってます。やはり "WSL2.0" が出る前でしたので色々、不安定だったようです。
kubectl
コマンドに慣れたのはよかったのですが、やはりノード単体では k8s のメリットが薄くdocker-compose
で十分になってしまうので、複数台のk8sノードを揃えないとね…ということでマシンを数台用意していただきました。しかし、本家k8sはそもそもマシンが6台以上無いとダメなので・・・k3sがあってよかった。。。
ちなみに "dockerdのコンテナ" 以外のコンテナも色々試してみたかったので LXD
についても試してみました5。LXC は動作も軽くてちょっとお気に入りだったのですが、docker-compose
コマンドに相当するもので使いやすい環境がなかったで結局、docker-compose
が開発にはいいじゃんと。
そして今年のもう一つのエポックとして4月ごろから案件で実際に GKE を構築するというチャンスに恵まれたため、本物のK8s を構築いたしました。k3sやらMnikubeやらUbuntu専用のmicrok8sも試していたので kubectl
は余裕 でした。しかし、GKEというかクラウドのk8sはゼニでリソースを買うということにとても神経を使いましたね。ちょっとのミスが実際に金額にハネる、というとても緊張感のある中で構築作業を行っておりました。ま、GCPのコンソールからWEBのUIでポチポチできるので即座にクラスタ削除ができるので、安心感はあるのですが。。。このあたりの感覚はとても身に沁みましたね。。。とても手作業ではやってられん、ということに。そして導入した "Terraform" でした6。
Terraform もなかなか開発途上だし GCP Provider も開発中だし GCP は仕変がアグレッシブだしでなかなか安定しませんでしたが、"クラウドのインフラがコード化できる"というのはとても大きかったですね。まさにインフラの冪等性。なんども、何度でもトライアンドエラーできる。(Cloud SQLはインスタンス名に同じ名前使えないけどね!)
これは Terraform というツール云々ではなく、GCP との戦いでした。(後のTerraform 0.11→0.12のバージョンアップもなかなかしんどかったけど。)
そしてこの GKE で立ち上げたのが Spinnaker でした7。この直後に GKE のサービスとして Spinnaker が追加されたので複雑な気持ちでしたが、再度 Halyard の設定からやるのはとてもじゃないけど無理なので見送りました。何より、GKE のサービスって、Terraform 対応してないんじゃないかな?
2. Firebase と プログラミング言語
レガシー開発から解放された私に待っていたのは "Firebase" での開発というそれまでと180度違う環境での開発となりました。Firebase はサービスの総称で中身はWEBのホスティング、Firestore、Functions などのサービスをワンストップで提供してくれるトータルバックエンドサービス?です。Java6付けの世界から急に「なんだそりゃ?!」な世界に突入いたしましたが、開発環境が Node.js + TypeScript(Angular 7)でまさに「マジすか?!」という状態でした。(Javaの安定した開発環境に慣れると Node.js と npm/node_modulesの環境は不安定でしょうがないですからね。)
そんなわけで、Angularに入門したわけでございます。ただ、ng-cli
の使い勝手はなかなか悪く無かったですね8。
Firebase の周辺技術もなかなか深いのですが、その中でもスマッシュヒットが Headless CMS の Flamelink でした10。
Firebaseにコンテンツエディタの機能をSAASとして追加することで自分の Firebase をヘッドレスCMSに出来てしまう、というなかなかメタメタなサービスですね。よく思いついたなぁ。。
また Firestoreを管理するツールの一つとして、Jupyter notebook を使ってみたりもしました11。
Firestore についてもいろいろ知見が溜まりました。そして決してゴールなんてないんだ ということもわかりました。
TypeScript 以外の言語としては、Julia13を試してみました。これは案件で使ってみたいけど、ついてこれるメンバーは居ないんだろな・・・
ちょっと違う軸ですが、Scrapy16にもトライしてみましたね。Jupyter notebook はこれまでローカル使っていたのですが、実はこれ、Microsoft Azure notebook を使ってました。クラウドの Notebook、なかなか悪くないです。
3. ブロックチェーン関連
今年のもう一つのエポックとしては "ブロックチェーン" ですね。巷ではいろいろ話が出てましたが実際の"開発"という面でちゃんと取り組んだのも今年からです。
ブロックチェーンについての棚卸し17から Ethereum での開発18、Ethereum のサイドチェーン Loom での実験19、そして Hyperledger の各種ブロックチェーン(Fabric20、Borrow21、Indy22 )を試してみました。
Hyperledger Borrow は Ethereum のスマートコントラクトを直接、実行できるようにする、というアグレッシブなプロジェクトですのでチャレンジした甲斐がありましたね。FabricのチェーンコードでSolidityが動くってのはわけわからんです。
また Indy はコアがRustでコンセンサスのネットワークが Python という変態構成のブロックチェーンでなかなか苦労しましたが Rust/Cargo にも無事に入門できたので大変良い勉強になりました。
ブロックチェーンの技術はやはり各種技術の最先端が詰まっているので時々は触れてみる必要あり、ですね。
一旦、ここまでといたします!
-
[2019年1月版]WSL + Ubuntu で Docker が動くっ!動くぞコイツッ!は12月31日〜1月2日にかけて作成されました。ゆく年くる年。 ↩
-
[2019年1月版]WSL + Ubuntu + Docker で Portainer 意外と動かなくて大変だった。
で、WSL + Docker は早々に見切りをつけて、軽量 k8s の k3sに挑戦いたしました3。この k3s で本格的にk8sの入門ができたのでよかったですね。ただ、初回はコマンドの打ち間違いでダウンロードに失敗していたため、Minikube4も試してみました。 ↩ -
【2019年2月末版】最軽量K8sのk3sを試してみた。、【2019年3月版】k3s 再挑戦 k3s は本命です。 ↩
-
【2019年3月版】MiniKube で Piping-server。Minikube簡単なんだけど、スタンドアローンじゃねぇ。。。 ↩
-
【2019年3月版】Ubuntu18.04でdockerが動くlxcコンテナの作り方と、【2019年4月版】LXC/LXDでホストのディレクトリをコンテナ内にコピーする)
そして何より "VSCode Remote Container" の正式版がリリースされて開発環境は VSCode + Docker Container で、という流れが決定的になりました。これが決定打となり、LXDコンテナはお蔵入りとなってしまいました。 ↩ -
【2019年4月版】Terraform+Spinnakerがよくね!? → 闇が深い。、【2019年4月版】Terraform + GKE でのいろいろ小技メモ、【2019年6月版】Terraform+Spinnakerがよくね!? → もはや沼。などなど ↩
-
[2019年1月版] angular-cliが神過ぎて涙が溢れているのを止めないで
また、Angular をクライアントとして node.js で動く GraphQL サーバーの Apollo Server を試してみたりもしました9。GraphQL にも本格入門しましたね。 ↩ -
【2019年2月末版】Apollo + Express + Angular で GraphQL Pub/Sub実装 〜 Subscriptionちゃんとね ↩
-
【2019年5月版】Firestore のデータメンテって Jupyter notebook (Python3) 使うとめっちゃ楽
TypeScriptのトランスパイラなしで動くエンジンとしてdeno
を発見いたしましたのでそれも試してみましたね12。
確かに TypeScript が"大本命"の一つであることは間違い無いと思います。 ↩ -
[2019年2月版] Juliaが1.1になっていたので触ってみるか、[2019年2月版] Julia + Jupyterで回帰分析してみる
また、Angular + Firebase の "ネイティブ化" ということで NativeScript14、Flutter15にもチャレンジしてみました。
Firebase + Angular を軸にいろいろ広がりました。 ↩ -
【2019年4月版】NativeScript+Angularで感じた新時代、【2019年5月】{N} + ng + Firebase : 準備編 ↩
-
【2019年5月】Scrapy の自作パイプラインで Firestore に結果を叩き込む、【2019年5月】Scrapy の自作パイプラインで Cloud Storage に画像を叩き込む ↩
-
【2019年3月版】Hyperledger fabric の EVM を試す。~ Hyperledger Burrow入門 ~、【2019年4月版】Solidityでビルドしたバイナリがちゃんと動くかHyperledgerのUTでデバッグしてみる。 ↩