⚽️

Technology Radar Volume 30 まとめ

2024/04/17に公開

2024 年 4 月 3 日公開

https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2024/04/tr_technology_radar_vol_30_en.pdf

Technology Radar についてはここにまとめている

この記事では次のことがわかる。

  1. 今号のテーマ
  2. 各カテゴリーごとの Adopt / Hold / ピックアップを紹介
    • ピックアップは将来的に影響がありそうなものや面白そうなものを選んでいる
    • 個人的な思いなども書いているので参考に

その他のまとめ

今号のテーマ

オープンソースっぽいライセンス: Open-ish source licenses

これはいわゆるオープンソースに適用されているライセンスの元で提供されていたソフトウェアがそうでないライセンスに突如変更されてしまうことを危惧したテーマだ。前者のライセンスについては Open Source Initiative が列挙しているものが有名だ。

最近のライセンス変更は次のものがある。

ライセンス変更の理由を含めた、昨今の動向については次のポストが詳しい。

https://zenn.dev/koduki/articles/45f65a5318f019

なお、各社ごとにライセンスが異なるとユーザーもとっつきづらくなるため、 PolyForm Project ではこういった類のライセンスの制約をわかりやすく表現する手段を提供している。

このテーマについては各自の立場や目的に照らして考えるべきだ。

ソフトウェア開発チームで AI を使う: AI-assisted software development teams

GitHub Copilot などを用いた個人へのアシスタントは定着してきたが、それをチームに対しても適用しようというテーマだ。

現在は突き抜けたエンジニアを確保するより、チームの開発効率を上げていこうというトレンドもあり、こういった議論がしやすくなっている。

LLM を裏に抱えた ChatOps によって既存のタスクだけでなく、新規のタスクも柔軟にこなせるようになるだろう。

また、 RAG を用いて組織の知識を LLM が利用できるようにすることでチームが必要とする労力が減り、 ChatOps の精度も上がっていくだろう。

LLM 用アーキテクチャパターンの出現: Emerging architecture patterns for LLMs

LLM をプロダクトに組み込むための様々な道具が実用段階に至っているよ、というテーマ。

pull request を本来の CI に近づける: Dragging PRs closer to proper CI

Martin Fowler による CI の定義に従うと、pull request上で CI をやるにあたっていくつか課題がある。

Martin は CI ができているかのポイントを冗談交じりに列挙している。引用すると次の 3 つだ。日本語も併記する。

  1. everyone on their team commits and pushes to a shared mainline (usually shared master in git) at least daily.
    チーム全員が 1 日に 1 回以上メインライン ( 大体は main ブランチ ) に commit と push をしていること

  2. each such commit causes an automated build and test.
    それらの commit すべてが自動的にビルドされテストされること

  3. when the build fails, it’s usually back to green within ten minutes.
    ビルドが失敗しても、大体は 10 分以内に再度成功すること

pull request 上でレビューを必須とした開発プロセスでは、そもそも最初の条件が非常に難しい。レビューやその後の意思疎通には時間を必要とすることが主な理由だ。

このテーマでは最近の GitHub merge queue 提供や、 stacking workflow の浸透などが語られている。

なおレビュー時間を短縮するための方法論として、 Martin のサイトでは次のようなやり方も提唱されているので、参考にすると良い。

日本において、これは技術課題というより適応課題と捉えたほうが良いと判断した。

アジャイル的な、承認を前提とした開発プロセスを是とする文化があると感じている。周りに倣っているだけなのか、コードへのオーナーシップが違った形で発露されているのか、開発における安全や安定の感覚が更新されていないためなのか、真因は現場によって異なるだろう。

このあたりの感覚については、 t_wada さんが日本語で継続的に発信してくださっているので一読すると良い。

「コードレビューしている」とは「プルリクエストを使っている」ことであるという記事があるように、まずコードレビューという言葉について、開発者へのリフレーミングが必要だ。

Techniques

Adopt

Retrieval-augmented generation (RAG)

LLM は文章の生成モデルであり知識を取り扱っているわけではない。そのために幻覚やユーザーへの返答が的を射ていない状況が発生する。ならば知識を扱えるようにしてやればいいじゃん、という発想全般を RAG という。

具体的な実現方法も様々あり、一般的なテクニックとなってきている。

チラ裏

個人的に RAG は単語群間の相関をモデルの外から差し込むことで、利用者に都合の良いモデルへと変形させているという理解をしている。 LLM を道具として洗練させているだけ、という解釈だ。

この方向の変化を押し進めると LLM が身体性を獲得できるかどうか ? という疑問がある。歩くには足を使うなどの、人間にとっての前提を知識として付与することで「共感」を学習できるのか ? といったあたりだ。そうすることで活用できる範囲が広がるだろう。

生物としての制約や一般化した感覚などを RAG で後付けできるので、それで十分という可能性もある。

いち生物としての感覚では、喜びや痛みなどがわからないと使えない場面はあるだろうし、それを獲得するには五感インターフェイスを与える必要がありそう、という肌感だがどうなるだろうか。

Hold

幅広い統合テスト: Broad integration tests

「幅広い統合テスト」は Martin Fowler によって定義されている。 E2E テストのようなおおがかりなテストのことを指していると理解すれば良い。

最近はテスティングトロフィーという概念も提唱されているので、これは流れに沿った blip だ。

必要以上の LLM 利用: Overenthusiastic LLM use

LLM の発展は目覚ましいものがあるが、「とりま使っとこ」という風潮にストップをかける blip だ。

既存の手法で十分に解ける課題であれば LLM を用いる必要はない。コストがそれなりにかかるからだ。また、汎用 AI ではないので適用が難しい分野もある。

半年前に発表された去年の Gartner hype cycle でも Generative AI が Peak of Inflated Expectations に挙げられている。みな同じことを感じているのだろう。

他選択肢を考慮せずに LLM を fine-tune する: Rush to fine-tune LLMs

実際はわからないが、 ChatGPT レベルのモデルを作ろうとすると金銭的なコストが非常に高くなるらしい。理論の研究や学習用のコンピューティングリソースもだが、データを揃えるためのに専門家が大量に必要とのことで、人件費も馬鹿にならないと言われている。

RAG や既存手法の利用を考えずに fine-tune するのはオススメできない。

SSR web アプリでの Web Components 利用: Web components for SSR web apps

Web Components を使った SSR では client で layout shift なく hydration することが難しいらしい。

この問題がなくても React が React Server Components という hybrid な方式を模索し始めているのもあり、確かに立ち位置は微妙だ。

ピックアップ

継続的コンプライアンス準拠: Continuous compliance - Trial

昨今のサプライチェーン攻撃を防ぐために SLSASBOM が普及してきている。

この blip ではそれを発展させ、ソフトウェアライセンスに違反していないか、法令や業界のセキュリティ基準などに準拠しているかなどがチェックできるといいよね、というものだ。

全自動でやっていくにはまだ難しいところがあるが、法務の専門家と協力しながらやっていくことは非常に意義があるだろう。

負債でなく健全性を見る: Tracking health over debt - Trial

技術的負債が存在していることが即悪いというわけではないが、メタファーを用いるとどうしても言葉に引っ張られてしまう。

それよりも今うまくいっているかどうか、という指標を可視化し、悪化したらテコ入れするという姿勢のほうが自然に感じられる。

何を健全性の指標として用いるかは、その組織の目的が達成されているかなど、いわゆる North Star Metrics などに準じたものが良さそうだ。

LLM を用いた自律エージェント群: LLM-powered autonomous agents - Assess

最近は multi-agent system を LLM で実現しようという流れがあるようだ。これで今何ができるのかについては AutoGen の例を見るとよいだろう。

ただ、LLM はあくまで自然言語を介したインターフェイスしか持たないため、なにか示唆を得ようとするのは労力やコストに見合わない可能性がある。ディベートのような陣営設定による議論をシミュレートして決定に影響する観点を洗い出す、くらいだろうか。文化など様々なバックボーン間の違いによる課題のあぶり出しなどができてくると有用だが、どこまでできるかを試してみてもいいだろう。

ChatOps や定型作業の裏で自律エージェントが動くようになると楽になるだろう。

Platforms

Adopt

CloudEvents

SaaS などが発生する特定のイベントのデータ形式を標準化したもの。

https://cloudevents.io/

https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.mdはとても小さいので見てみるとよいだろう。

様々なサービスが対応しているようだ

Hold

なし。

ピックアップ

Langfuse - Assess

LLM を用いたアプリケーションのプラットフォーム。

https://langfuse.com/

FOCUS - Assess

FinOps Foundation が定義した、各クラウドベンダーや SaaS の請求情報を標準化したもの。

https://focus.finops.org/

これが普及すると FinOps を楽にできるようになるだろう。

WebTransport - Assess

クライアント・サーバー間で双方向のデータのやりとりをするもの。 HTTP/3 の上に構築されている。

https://developer.chrome.com/docs/capabilities/web-apis/webtransport?hl=ja

WebSocket は TCP をベースとしているので、  TCP を原因とする課題は WebTransport で解決される可能性がある。

Tools

Adopt

Conan

C/C++ 用パッケージマネージャー。

https://conan.io/

Kaniko

Docker daemon に依存せず実行可能なコンテナーを作成できるツール。

https://github.com/GoogleContainerTools/kaniko

Karpenter

制約を加味しながら自動でノードのスケーリングをしてくれるツール。

https://karpenter.sh/

Hold

なし。

ピックアップ

Terrascan - Trial

IaC 用の静的リンティングツール。

https://github.com/tenable/terrascan

Pop - Trial

distributed work を効率的に実施できるよう設計された SaaS 。

https://pop.com/

Bruno - Trial

Postman などに代わる API テスト用のツール。

https://github.com/usebruno/bruno

Maestro - Trial

モバイルアプリ向けの E2E テスティングツール。

https://maestro.mobile.dev/

aws-nuke - Trial

使われていない AWS のリソースを削除するためのツール。

https://github.com/rebuy-de/aws-nuke

Cargo Lambda - Assess

Rust で AWS Lambda を開発しやすくしてくれるツール。

https://www.cargo-lambda.info/

Nemo Guardrails - Assess

LLM の出力から公序良俗に反したりセンシティブな話題を抑制するツール。 ChatGPT が受け入れられた理由のひとつとして挙げられており LLM を用いたプロダクトを作成する際に有効だ。

https://github.com/NVIDIA/NeMo-Guardrails

System Initiative - Assess

GUI で構成を作りつつ IaC できるツール。実構成を手で変更した場合も同期してくれるらしい。

https://www.systeminit.com/

CodiumAI - Assess

テストの生成やアドバイスをしてくれる AI ツール。開発とテストでは異なるメンタリティが必要となるため、こういったもので代替していくのは良いだろう。

https://www.codium.ai/

LinearB - Assess

エンジニアの活動を可視化するツール。

https://linearb.io/

様々なツールに対応しているようで、実際の活動を捉えやすい可能性がある。

Languages & Frameworks

Adopt

なし。

Hold

LangChain

急速な普及に伴って大きくなりすぎ、使いづらくなっているらしい。一時的な可能性もあるが、今は様子見が良いとのこと。

ピックアップ

Astro - Trial

コンテンツ駆動のサイトジェネレーターらしい。 islands architecture を採用している。

https://astro.build/

Crabviz - Assess

コールグラフ生成用の VSCode 拡張。 language server を介して生成するので、多様な言語に対応しているらしい。

https://github.com/chanhx/crabviz

GitHubで編集を提案

Discussion