オールアバウトTech Blog

株式会社オールアバウトのエンジニアブログです。

最新の技術はこれだ!Technology Radarによる技術トレンド調査@VOL.19

暖かく過ごしやすい季節になってきましたね。ブログ担当@amymdです。

以前このブログで、Team TechRaderという勉強会で「TECHNOLOGY RADAR NOV'16」の共有会を行ったという記事が投稿されていました。

allabout-tech.hatenablog.com

今回、およそ2年ぶりにTECHNOLOGY RADARの調査会を再び立ち上げたので、 その調査結果を報告したいと思います!

TECHNOLOGY RADARとは

www.thoughtworks.com

TECHNOLOGY RADARとはThoughtWorks社が発表している技術トレンド分析の調査結果になります。 年1-2回発表しており、2018年は5月と11月に発表されました。

ユニークな点は、技術トレンドの分析を Techniques(開発手法) / Tools(ツール) / Platforms (プラットフォーム) / Languages & Frameworks(言語とフレームワーク) の4分野に分けているところです。 また、評価結果も ADOPT / TRIAL / ASSESS / HOLDの4つに分けられています。

  • ADOPT : プロジェクトにマッチするならば、採用を強くおすすめしている。
  • TRIAL : プロジェクトでリスクを管理できればやる価値はある。
  • ASSESS: どのような影響をあたえるか理解するために採用するときがある。(今後のために採用するときがある)
  • HOLD : 採用する場合は慎重に進める必要がある。

今回は、「TECHNOLOGY RADAR VOL.19」を調査したので調査結果を共有します。 また、数が多いため本記事ではADOPT、TRIAL、ASSESSで取り上げられていた技術からいくつか抜粋したものについて紹介したいと思います。 (紹介する内容は調査担当者のコメントとなっています。)

Techniques

ADOPT(採用を強くオススメ)

Event Storming

  • 最近マイクロサービス化が流行ってるが、これはサービスが長期のビジネスドメインの境界に沿ってきれいに分けられている場合にのみに実践されている傾向がある
  • イベントストーミングとは、イベントに着目した設計手法で、Alberto Brandolini氏が考案した
  • 主要な利害関係者をひとつの部屋に集め、制限のないモデリングスペースを使い、付箋をドメインイベントに見立ててモデリングをすることで、数時間で良いモデルが作成できる

TRIAL(リスク管理でくればやる価値あり)

1% canary

  • ユーザーのニーズを調査する手法のひとつにCanary Release(カナリアリリース)というのがある
  • 簡単に言えば、ある新しいプロダクトやサービスの機能を「一部の先行ユーザ(たとえば1%)」に対してだけリリースする、という手法
  • 先行リリースをすることで新機能に対して素早いフィードバックを得ることができ、それによって機能の改善を行うことができる
  • 本手法は、Facebookがその開発手法として採用したことで有名になった。尚、Facebook内では""Dark launch""と呼ばれているらしい

Crypto shredding

  • 機密データを保護するために、使用されている暗号化キーを故意に上書きまたは削除することによって、機密データを判読不能にすること
  • たとえば、ユーザーの個人情報のテーブル全体を、レコードごとにランダムなキーを使用して暗号化し、別のテーブルにキーを格納することができる
  • ユーザーが「忘れられる権利」を行使した場合は、適切なキーを削除するだけで、暗号化されたデータを効果的に「シュレッダーにかけることが」できる

Four key metrics

newrelic.degica.com

  • DevOpsチームに置いて重要な4つの指標
  • lead time(リードタイム)
  • deployment frequency(コードリリースの頻度)
  • mean time to restore (MTTR/解決までの平均時間)
  • change fail percentage(変更による失敗率)

Observability as code

  • Observability(監視機能)はマイクロサービスと分散型アーキテクチャ運用の不可欠な部分
  • 監視機能の重要なポイントは各システムログの出力の可視化
  • これまでの可視化システムはGUIベースで、アラートの設定とダッシュボードの設定はGUIで行われる
    • 繰り返し不可能の設定、継続テストも不可、アラートの調整が不可で、重要なアラートを無視してしまう可能性が高い
  • コードで管理できると上記が解消する可能性がある
  • APIとコードで管理できる機能がある監視サービスを選ぶのはおすすめ
  • 監視機能のコード化(Observability as code)は、infrastructure as codeにおいてよく忘れがちになるため、優先にするのは重要

Run cost as architecture fitness function

  • サーバーの使用とシステムのアーキテクチャ変更によるサービス料金の変化があまり監視されていない傾向がある
  • 開発者はサーバレスが安いとよく思い込んでいるが、クラウドプロバイダの賢い料金モデルで料金が速いペースでDedicated cloud(それから、プレミス)より高くなる
  • architecture fitness functionとして、システムの運用コストを監視するべき
  • 提供されたサービスの価値に対するサービス使用料金をトラッキングする仕組みを作る

Tools

TRIAL(リスク管理できればやる価値あり)

Archery

archerysec.com

  • Archeryは開発者や研究者がスキャンを実行したり脆弱性を管理したりするのに役立つオープンソース脆弱性評価および管理ツールである
  • オープンソースツールを使用してWebやネットワークの脆弱性スキャンを行ったり、スキャンデータを関連付けてまとめて表示を行ったりできる
  • RequirementsにOpenVas, OWASP ZAPが入っているためおそらく脆弱性の検査自体はこれ
  • スキャンや脆弱性管理を自動化するためにArchery tool APIを使うこともできる…らしい

git-secrets

github.com

  • gitのcommitやcommitメッセージなどをスキャンし、その中に事前設定した秘密情報が含まれている場合commitをリジェクトできる。(commit時にhookする機能がある)
  • 正確には
    • git commit時にそのcommitの中に、
    • 任意のタイミングで過去のgit historyの中に、
    • あるいは任意のタイミングで任意のファイルの中に、
    • 事前設定された正規表現にマッチする情報が存在するか否かを検査する

LocalStack

dev.classmethod.jp

  • クラウドアプリケーションを開発するためのテスト/モッキングフレームワークを提供するツール
  • イメージとしてはローカルに擬似的なAWS環境を作ってテストできる感じらしい

Mermaid

mermaidjs.github.io

  • フローチャートなどのダイアグラムを生成するjsのツール
  • Textでかいたものが手軽に図になる
  • VSCodeなどのツールにも拡張機能が用意されており、プレビュー可能
  • markdownのなかに混ぜて書いたりできる

Prettier

prettier.io

  • PrettierはJavaScript用のコードフォーマッタである
  • ESLintでは設定に該当したエラーのみを整形するため、厳密に整形を行うには多くの項目を設定する必要がある。また設定自体も複雑になる
  • こちらではデフォルトの整形ルールが存在しており、そのままでもうまく整形を行ってくれる
  • また、設定できる項目も少なく、設定が複雑になる可能性が低い
  • PrettierはprecommitフックやIDEプラグインと同時に利用可能

UI dev environments

storybook.js.org

  • Design Ops(デザインの開発・運用サイクルを回す)が求められる昨今において台頭してきたツールの概念
  • UI開発環境を用いることで、UXデザイナーと開発者の連携を促進することができる
  • ユーザーは独自のUIコンポーネントライブラリを作ることができ、デザインガイドとして利用する
  • 開発者とUXデザイナーの認識をあわせながら開発ができる

Platforms

TRIAL(リスク管理でくればやる価値あり)

Apache Atlas

atlas.apache.org

  • 企業のデータガバナンスのニーズにあったメタデータマネジメントフレームワークである
  • Atlasは、メタデータのタイプをモデル化し、データ資産を分類し、データ系統を追跡し、データ発見を可能にする機能を提供する
  • 注意事項:メタデータマネジメントプラットフォームを立ち上げる際には、マスタデータマネジメントの際に犯したミスを繰り返さないように注意する必要がある

Shared VPC

cloud.google.com

cloud.google.com

  • 共有VPCを使用して、組織は複数のプロジェクトから共通のVPCネットワークにリソースを接続できるため、そのネットワークの内部IPを使用して、安全で効率的な相互通信を行うことができます
  • 共有VPCを使用する場合、プロジェクトをホスト プロジェクトとして指定し、他のサービス プロジェクトをホスト プロジェクトに接続します
  • ホストプロジェクトのVPCネットワークは、共有VPC ネットワークといいます。サービスプロジェクトの適格リソースは共有VPCネットワーク内のサブネットを使用できます

Languages & Frameworks

TRIAL(リスク管理でくればやる価値あり)

MockK

github.com

  • MockKはkotlinのmock用ライブラリ
  • けっこう簡潔に書ける
  • コルーチンやラムダブロックなどのkotlin言語の機能に対する一流のサポートを提供しているらしい

ASSESS(理解するために採用するかも)

Apache Beam

qiita.com

  • バッチ処理とストリーミング処理のためのプログラミングモデル
  • Beamは、Apache Spark、Apache Flink、またはGoogle Cloud Dataflowなどの実行エンジン(またはランナー)とは無関係に、これらのパイプラインを記述するための移植可能なAPI層を提供します
  • Beamには、データパイプラインのニーズの大部分をカバーする豊富なI/O変換セットがあり、特定のユースケースに合わせてカスタム変換を実装するためのメカニズムも提供します

Nameko

githubja.com

  • Pythonの超軽量フレームワーク
  • Fluskと異なり、WebSocket, HTTP , AMQPなどをのサポートなど、一部の機能しかもっていない
  • テストの容易性も注目されており、Flaskのようなテンプレートを必要としない場合、Namekoをフレームワークの候補に入れるのも良いだろう
  • Pythonで、簡単 & 保守しやすいAPIを作るなら良さそう

まとめ

いかがでしたか? 今回は取り上げられている合計17個について紹介しました TECHNOLOGY RADARで紹介されている技術を調査することで各分野ごとのトレンドを知ることができ、とてもおもしろかったです。ArcheryやMermaidなど実際に利用してみたいと思うような技術もありました。 技術採用の一つの情報源として、今後も定期的に調査していきたいと思います。