Technology Radar Vol.22(2020年5月版)で気になった技術

2020.05.26

Introduction

先日、ThoughtWorks Technology Radar Vol.22が発表されました。
前回のVol.21が2019年11月だったので、半年ぶりになります。
本稿では、Technology Radar Vol.22で個人的に気になるトピックについて
主観で紹介します。

What is Technology Radar?

ThoughtWorksが発表している技術トレンドの調査結果です。
今後流行りそうな技術からEOLを迎えそうな技術までカテゴリごとに発表されます。
この結果は年に何度か(最近は1回〜2回くらい?)発表され、
そのたびにblogネタが溜まっていく素晴らしいモノです。

技術トレンドの調査結果については、↓の4種類に分けています。

  • Techniques (開発手法とか理論とか)
  • Tools (開発ツールやソフトウェア)
  • Platforms (プラットフォーム)
  • Languages & Frameworks (言語、フレームワーク、ライブラリ)

評価結果は↓の4種類。(主観)

  • ADOPT : プロジェクトにマッチするなら使うべし
  • TRIAL : プロジェクトでリスクを管理できるなら使うべし
  • ACCESS : 今後のことを考えるなら使うことを検討してもよい
  • HOLD : よほどの理由が無ければやめたほうが無難

では各分野ごとに、私が気になった技術について紹介します。

Techniques

2. Infrastructure as code (ADOPT)

いまや当たり前となった Infrastructure as Code ですが、
ターゲットがCloudプラットフォームになった現在、さらに重要になっています。
リンク先に書いてあるように、
IaCとは、ソフトウェアの分野から得た知見やノウハウを
インフラ領域全てに一貫して適用するのが重要とのことです。

3. Micro frontends (ADOPT)

サーバサイドではMicroservicesというアプローチを用いてモジュラリティを高め、
アプリケーションの開発をより簡単に行えるようになりました。
しかし、フロントエンドははいまだにモノリシックなアプリとなっており、
せっかくバックエンドがMicroservicesになっても Micro frontendsとは、Microservicesで
分割したサービスにフロント側も含めようという考えです。
大規模な組織が複数チームにまたがるUI開発を分割する
ケースにおいてポピュラーな手法となる、らしいです。

参考 : Micro Frontends

4. Pipeline as Code (ADOPT)

システムがMicroservices、Micro Frontendsへ移行して
自律したチームが複数動く場合、
全チームで一貫したビルドプロセスが必要になります。
そのためのプラットフォームとしてJenkins2やCircle CIなどが人気ですが、
これらのプラットフォームではビルド・テスト・デプロイ等のタスクを
コードで管理(Pipeline as Code)できます。

ちなみに、私が参加しているprismatixという
サービスの開発でも、ビルドプロセスはCircle CIを使用しています。

参考 : Pipeline as Code ~ビルドパイプラインをコードで管理~

5. Pragmatic remote pairing (ADOPT)

ペアプログラミングが有用なのはすでに周知の事実ですが、
after COVID-19の世界では対面でペアプロすることは少し難しくなりそう。
こんなときはリモートでのペアプログラミングです。
Visual Studio Live Shareを使うのが多いようですが、
Floobits を使うのも良さそうです。

7. Continuous delivery for machine learning - CD4ML (TRIAL)

個人的に興味がある機械学習分野のトピック。
機械学習をアプリケーションにサービスとして適用するということは、
モデルの開発/トレーニングからテストやデプロイ、
監視などさまざまなことに関して考える必要があります。
CD4MLとは、機械学習モデルの開発からデプロイ、モニタリングなどの開発や
運用サイクルを可能にする手法であり、「機械学習のための継続的デリバリー」です。

具体的には、Azure Machine Learningとか
AWS Sagemaker、Google AI PlatformなどのサービスがCD4MLですね。

参考 :
Continuous Delivery for Machine Learning
機械学習系開発におけるCD (CD4ML)
Amazon SageMaker Studioを使って機械学習をやってみる

12. Security policy as code (TRIAL)

セキュリティの重要性は言わずもがなですが、システムが大規模化・複雑化していくにあたって
セキュリティポリシーの管理も複雑化していきます。
その解決策の1つとしてセキュリティポリシーをコードとして扱う手法があります。
Open Policy AgentIstio を用いることで、Security policy as code を提供できます。

27. Snapshot testing only (HOLD)

[Snapshot testingとは]
テスト対象の出力をスナップショットとして保存し、
コードの修正によってスナップショットに変更が発生しているか確認するテスト。

私にはあまり馴染みのないテスト手法なのですが、
RectコンポーネントをJestつかってやるのが多いらしい。

このテストですが、レガシーシステムでコードが引き続き問題ないことを
保証するときは有効ですが、「Snapshot testing のみ」をテストとして使用するには推奨されない。

このテストはコンポーネントの動作ではなく、
コンポーネントによってDOMで生成された結果を検証します。
これがそもそも間違ってたら、なんの意味も無いテストになるということですね。
コンポーネントのロジックと動作のテストも必要なんだから、
こういうのでテストしよう といってます。

Platform

43. JupyterLab (ASSESS)

Jupyter notebookの後継にあたる、Webベースのユーザーインターフェイスです。
先日β版がリリースされました。

Jupyter notebookは作成したプログラムを実行したり、
実行結果を記録しながらデータの分析作業を行うWebベースのツール。
対話式にコードを実行したり結果を保存したりできる。

参考 : JupyterLab Documentation

Tools

50. Cypress (ADOPT)

WebUIの自動テストを行うためのツールといえばSeleniumがうかびますが、
Seleniumに勝るとも劣らないツールが、このCypressです。

Seleniumと比較して、セットアップが簡単だったり、テストが高速だったりします。
以前はChromeでしか動作しなかったのですが、最近はFirefoxにも対応。

参考 : Cypressで送る快適E2Eライフ

51. Figma (ADOPT)

Figmaは、ブラウザ上でUIデザインができるツール。
とくにコラボレーション機能で複数の人が同時に作業していくことができ、
リモート環境においても役立ちそうです。 また、APIでのアクセスも可能。

55.Goss (TRIAL)

ServerspecとかInSpecみたいな、Go製のサーバテストフレームワークです。
依存ライブラリもなく、インストールが簡単。
テストの記述はYAML形式で行い、 動作が軽いのが特徴です。

参考 : github

57.k9s (TRIAL)

k9sは、Kubernetesクラスタのリソースを管理するためのCLIツールです。
kubectlで実行できる操作を双方向的なUIで提供してくれます。
また、リソース定義ファイルの管理やシェルの実行、プロセスの管理もできます。

59.mkcert (TRIAL)

mkcertは要するに、かんたんオレオレ証明書です。
ローカルの開発に実際の認証局(CA)からの証明書を使うのはけっこう面倒ですが、
mkcertを使用すると、自己署名証明書を生成し、ローカルCAをシステムルートストアにインストールできます。

60.MURAL (TRIAL)

MURALは「digital workspace for visual collaboration(ビジュアルコラボレーションのためのデジタルワークスペース)」と自身でいってます。
チームみんなでホワイトボード/付箋をいじくってるみたいに操作可能です。
このツールも、リモート作業する際には役立ちそうなツールです。

87.kind (TRIAL)

Dockerコンテナノードを使用してローカルでKubernetesクラスタを構築するためのツールです。
名前の由来は「Kubernetes-in–Docker」なのでkindとのこと。
Kubernetes自体のテストでもこれを用いています。

参考 : kind (Kubernetes in Docker) を試してみる

Languages & Frameworks

77. React Hooks (ADOPT)

React Hooksは、React v16.8.0から正式に導入された機能です。
stateやcontextなど、少し扱いづらかったAPIを、
クラスを記述せずシンプルで扱いやすくするための機能です。
また、React Test RendererとReact Testing Libraryを使うことで
React Hooksのテストがより便利になるとのことです。

79.Vue.js (ADOPT)

現在最もいきおいのあるフロントエンドJavaScriptフレームワーク。
React.jsに比べ、シンプルに記述が可能です。
Typescript対応がいまいちだったようですが、Vue.js 3(現在β版)では完全にサポートされるようです。

83. Karate (TRIAL)

karateは、もともとAPIベースのテストを自動化するフレームワークでしたが、
現在はUIテストも可能にです。
Gherkin形式のDSLでシナリオを記述することができ、
シナリオ中でJava/Javascriotの関数を定義して使ったりすることも可能になっています。
JavaやJavascriptが使えるということは、サーバ側に対してもkarate経由でアクセスでき、
サーバやデータベースの起動や初期化も可能です。

87.Rust (TRIAL)

2020 Developer Surveyで「継続的に利用したいプログラミング言語」
第1位になったことでもわかるように、Rustの人気は日々に高くなってます。
高速&高安全性で、個人的に注目しているプロダクトDenoもRustで実装されています。
私にとっても、今後使いたいプログラミング言語の1つです。

関連