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

# 今年書いた記事の振り返り、後半戦

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

2日に引き続き、２０１９年の"俺的技術トレンド"を掘り起こしていきます。疾風怒濤の後半戦です。

## GCP と GKE

今年の技術エポックとしてもっとも大きいものの一つがGKEでの **Kubernetesの使用** でしょう。~~まさか、実際の案件で Kubernetes の構築するとは思わなかった。~~
Firebase を使用した案件で仕様（夢）が膨らみ、FunctionsからGCPのPub/Sub、ついにGKEでのApollo-Server、それをデプロイする Spinnaker とこれらをワンストップでデプロイする Terraform とGKE関連で広大な技術領域を勉強させていただきました。ここまでは前回のおさらいです。

さらに、GKE で Elasticsearch の Operator 導入しました。モンスター級のサービス(セキュリティ的にも)なので、Operatorがなければ Elasticsearch なんて自前クラスタでホストするもんじゃないです。しかし、やはり Elastic の名前は**伊達じゃない**。
とりあえずElasticSearchにデータ入れておけばあとでどう表示したくなってもどうにかなる、どうにでもなる、そんな感じです。**マジ、Elastic**。
このElasticSeachのOperatorに関しては、問題なくあっさり動いてしまったため、本家のチュートリアル以上に書くことがないので記事にしてません。さすが Elastic。
Aggsでちょっと引っかかるところがありましたが [^1] 概ね順調でございます。

GCP に限らずですが、深く付き合い始めると色々とアラが見えてくるものでございます。
Cloud FunctionsのGoランタイムのバージョンがしれっと変わっていたり[^24][^2]、Cloud Storage の直リンクはデフォルトではログインしてないと見れなかったり[^3]、FunctionsやGCPを内部IPで通信できるはずのServerless VPS Access が us-central でしか使えなかったり[^4]・・・
GCPはサービス自体のライフサイクルが早いのでそれなりに覚悟決めないと大変ですね。。。
お気に入りのサービスもしれっと非推奨になっているかもしれません・・・

## GraphQL と "マイクロサービスアーキテクチャ"

GKE で動かしてみた Apollo Server ですが Cloud Functions 上で直接、実行するということにもチャレンジしてみました[^5]。GraphQL という API のエンドポイントは今後もどうにか活かしていきたいので、GraphQL の開発効率アップのために様々なトライをしてみました。TypeORMの導入[^6]やOpenTracingの導入[^7]などなど。

そして OpenTracing 調査中に出会ったのが、Eclipse MicroProfile とそれを実装する Javaの Microservice 製品の数々です。Quarkus、Helidon、Micronaut などなど。特に **Quarkus の開発効率の良さは群を抜いている**[^8]と思いますね。
MicroProfile 対応なのでOpenTracing や OpenAPIの対応もバッチリ[^11]です。Configやフォルトトレランスについても試してみたいところですがまだ着手できていないです。。。

この Quarkus は MicroProfile 対応というだけでなくて、GraalVM対応済みでネイティブコンパイル可能という熱いフレームワークでございます。思わず、ネイティブ化の限界に色々チャレンジしてしまいました。PDFで日本語出力に挑戦したり[^9]、Thymeleafテンプレートエンジンを使用したり[^10]。Cloud Run やAzure Container Instances のようにコンテナそのものをサーバレスにしてしまうサービス[^15]が出てきているのでJavaでこの開発効率なのにネイティブの軽量さとパワーを持っているというのは驚くべきことです。
実際にGrafanaなどでメモリ使用量の少なさを目の当たりにすると[^25]、node.jsのコンテナなんて怖くてGKE上にはデプロイできないと思ってしまいます。

## Keycloak で SSO

Java のエンタープライズ向けシステムを扱う上で避けて通れないテーマが古くて新しいSSOです。Keycloak + X ということで、OAuth2.0 や OIDC にトライしました。
Quarkus[^12]、Angular[^13]、Concourse CI[^14]、記事にはしておりませんでしたが Concourse-CIとほぼ同じ手順で Grafana の SSO も実施しております。

ここで OIDCやOAuthにどっぷりはまれたので次の山もなんとか超えることができましたね。。。

## Azure 

今年の技術エポックとしてもっともの大きいものの一つがマイクロソフトのクラウドサービス **Azureに初挑戦** ですね。(というか技術的なエポック多かったなぁ。。。)

Quarkus の MongoDB-Panache で本物のMongoDBではなく、CosmosDB に接続してみたり[^16]、先ほどのQuarkusネイティヴコンテナをデプロイしてみたり[^15]、割と順調だったのですが。。。

AD B2C での SSO には骨が折れました。特に設定画面の使い方に苦労しましたね。。。
なんとか、Quarkus(Functions App)とのSSO[^17]、Angular(Blob Storage)でのSSO[^18]に上手くいったので良かったです。

Azureの案件は来年も続くのでしばらくは Azure ネタが尽きないと思います。

## その他、言語、ツールなどなど

JavaScript 関連、Typescript 関連の記事は、これらを日常的なツールとしても使っているのでやはりちょこちょこと上げております[^19][^20][^21]が、Angular + Typescript の案件が続くので来年もぼちぼち上げていくことになるでしょうね。Typescript はもうトレンドではなく個人的にデファクトになってしまいました。

ブロックチェーン関連ではHyperledger Indy[^22]、また Metamask[^23]での開発？に挑戦しております。前半戦の記事でも書きましたが、最近のブロックチェーンは~~変態~~最先端のプロジェクトなんで時々はチャレンジが必要ですね。

そして個人的な挑戦といえば、先日、Raspberry Pi 4 が到着しました！！！
勢いだけでポチってしまって周辺機器なんてほぼなんもなかったのに、それでもなんとかSSHでログインできたので感動です[^26]。小さいけどしっかりLinuxのサーバーなんだから、頼もしい限りです。
アドベントカレンダーの締めもラズパイで何かネタがお届けできればいいな、と考えております。

今年も色々ありましたが、というか今も色々とチャレンジ中ですのでまとまり次第、記事にあげていきたいと思います！

とりあえず本日時点の振り返りは以上といたします。

[^1]: [【2019年7月版】Elvis は Primitive を返せない。@Elasticsearch, Painless](https://qiita.com/koinori/items/69a152599e1434d1a4ed)
[^2]: [【2019年9月版】Cloud Functions のバージョンアップに負けない！Go開発環境の構築方法](https://qiita.com/koinori/items/3f16d25dfbad28920532)
[^3]: [【2019年10月版】Cloud Storageの直リンクは見れない](https://qiita.com/koinori/items/f8f534598fe8e1c40c7e)
[^4]: [【2019年8月版】Cloud FunctionsからGKE上のサービスに内部IPでHTTP GET](https://qiita.com/koinori/items/2bc0ccd5e623685ffb9c) 
[^5]: [【2019年10月版】Cloud Functions + Cloud SQL で TypeGraphQL + Sequelize の Apollo Server を動かす](https://qiita.com/koinori/items/a07ff64129f0420f10bc)
[^6]: [【2019年10月版】TypeGraphQL なら ORM は TypeORM でしょう。](https://qiita.com/koinori/items/ef68b401a8f43d3556d6)
[^7]: [【2019年11月版】Apollo Server の GraphQL API に OpenTracing を入れてみよう](https://qiita.com/koinori/items/bd8d72ac31ea4f44b1cf)
[^8]: [【2019年11月版】Quarkus で Hibernate-Panache の REST API 作ってネイティブ化し Jaeger でトレース](https://qiita.com/koinori/items/244f0ecb8fd7ecd4f34f)
[^9]: [【2019年11月版】Quarkus で PDFBox もネイティブ化に挑戦！→日本語はアカン！](https://qiita.com/koinori/items/7599cbb2db0dd8b17e79)
[^10]: [【2019年11月版】QuarkusでThymeleafのネイティブ化に挑戦！→テンプレートでメソッド呼び出しはちょっと待った！](https://qiita.com/koinori/items/ccbb1d77583668e41c04)
[^11]: [【2019年11月版】Quarkus + Angular で OpenAPI からクライアント自動生成](https://qiita.com/koinori/items/6829403841487f1cc440)
[^12]: [【2019年10月版】Quarkus の REST API を KeyCloak で SSO するデモを docker-compose で動かしてみた。](https://qiita.com/koinori/items/331029bcc823cc222a8f)
[^13]: [【2019年11月版】Keycloak ニテ Angular ヲ AuthGuard セヨ](https://qiita.com/koinori/items/e5222fae699aefecbfb2)
[^14]: [【2019年11月版】Concourse CI を Keycloak で SSO](https://qiita.com/koinori/items/5f0c21c6bd3dd2072f1b)
[^15]: [【2019年11月版】Quarkusのネイティブバイナリコンテナ を Azure Container Instances にデプロイ](https://qiita.com/koinori/items/f1ff491701d17a651f8e)
[^16]: [【2019年11月版】Quarkus + Panache で CosmosDB as MongoDB に入門](https://qiita.com/koinori/items/85ce156216103f8d7db6)
[^17]: [【2019年12月版】Quarkus、Azure Functionsに載せるは天国。AD B2C で OIDC は地獄。](https://qiita.com/koinori/items/8a2f1a2be0c15c662fe3)
[^18]: [【2019年12月版】Blob Storage の Angular で AD B2C の OIDC はそこそこ問題ない。](https://qiita.com/koinori/items/867cac7b648edee133f4)
[^19]: [【2019年6月版】jsでクロージャに渡す変数はとりあえずconstしておけッ！！](https://qiita.com/koinori/items/f2cd26622cf33bb2f805)
[^20]: [【2019年6月版】fs.writeFile したら ERR_INVALID_CALLBACK ですって](https://qiita.com/koinori/items/7a69e0c0033bf61b44c8)
[^21]: [【2019年7月版】TypeScript はじめの一歩](https://qiita.com/koinori/items/ed13ab8bbc6edcc5deb9)
[^22]: [【2019年7月版】Hyperledger Indy のサンプル(ちょい古め)を動かしてみた](https://qiita.com/koinori/items/d6730ff801650d313704)
[^23]: [【2019年9月版】Android版Metamaskアプリの中の自前dAppsをデバッグする](https://qiita.com/koinori/items/97350af5c176fee724f5)
[^24]: [【2019年9月版】Cloud FunctionsでGoをデプロイをする際のエラーメッセージが「go: finding ・・・」だった時の対処方法](https://qiita.com/koinori/items/cf381675eb8ac596dfe0)
[^25]: [【2019年10月版】GraalVMでNative化した Javalin のコンテナをcAdvisorでチェックしてみる](https://qiita.com/koinori/items/7505cebc57b68bc097ae)
[^26]: [【2019年12月版】祝！ラズパイ4 到着！！だが周辺機器はゼロだ！](https://qiita.com/koinori/items/8fdf5e753e10e840b02b)