最新記事公開時にプッシュ通知します
2025年9月25日
藤 吾郎
Starley株式会社のソフトウェアエンジニア。株式会社ディー・エヌ・エー、クックパッド株式会社、株式会社ビットジャーニー、ファストリー株式会社を経て2024年9月より現職。趣味はOSSのツールやライブラリの開発。二児の父。
Github:gfx
Bluesky:@gfx.bsky.social
ブログ:Islands in the byte stream
2025年のいま、私たちは「エージェンティックコーディング革命」の渦中にいます。Claude Code、Devin、Cursor といったコーディングエージェントが実装の多くを担い、アルゴリズムやアーキテクチャは瞬時に形になります。
このような時代に技術書を読む必要はあるのでしょうか。もちろん、あります。その理由は、この革命が単なる生産性の向上ではなく、超高速実装によって「量が質に転化する」という変化をもたらしているからです。たとえば、既存ツールを工夫して使うよりプロジェクト専用ツールをつくる方が速い。実サービスで異なるアーキテクチャを比較できる。A/B テストは「局所最適化」から「まったく異なる体験の比較」へと拡張される。こうした質的変化が起き始めています。
ただし、コーディングエージェントはあくまで「作業者」です。ソフトウェアエンジニアの想像力を超えるものはつくれません。しかも彼らは複雑なコードを大量に書くことをためらわないという特性を持ちます。よい面は、アーキテクチャ刷新や UI の大幅改修のような、本来なら数週間かかる作業を短時間で実現できること。悪い面は、大量の複雑なコードを一瞬で積み上げて、「要求を満たすもっともシンプルなコードを目指すべき」というKISS(Keep It Simple, Stupid)原則をいとも簡単に踏み外し、その結果として技術的負債を超高速で蓄積することです。
さらに、重要なのは責任の所在です。コーディングエージェントは、成果物に責任を持てません。責任を持つのは常に人間のソフトウェアエンジニアです。コーディングエージェントが生産したコードであっても、それを生産させたソフトウェアエンジニアは、そのコードに責任を負います。それはつまり、コーディングエージェントが生産したコードの1行1行を理解して、なぜその実装なのかを説明できなければいけません。コーディングエージェントが仕様書を記述できたとしても、その内容が妥当であるか、そしてその実装が将来のシステムの持続可能性を損なわないかを最終的に判断するのは、ソフトウェアエンジニアの責務です。
だからこそ、この時代でも「功夫(クンフー)」が重要です。功夫とは、長い時間をかけて身につけた技能や修練です。それは、豊富な選択肢を持ち、状況に応じて最適解を選び抜く力であり、設計や実装の判断を支える知識と経験の蓄積です。功夫こそが責任の裏付けになるのです。
本記事では、TypeScriptプログラマーとしての功夫を高めるための4冊 ―― TypeScriptの解説書2冊、アルゴリズム本1冊、コーディング作法本1冊 ―― を紹介します。これらは、コーディングエージェントが書くコードの価値を最大限に引き出し、技術的負債を抑えながらソフトウェアを健全に成長させるための強力な武器となるはずです。
▲『プロを目指す人のためのTypeScript入門』 鈴木僚太 著、技術評論社
本書は、TypeScript の「よいコード」とは何かを、著者の確かな経験と知識に基づいて学べる一冊です。TypeScript は JavaScript に型システムを加えた言語ですが、単に型を付けただけではよいコードにはなりません。型安全性を活かしつつ、可読性・保守性の高いコードを書くには、TypeScript と JavaScript の両方の仕様を理解し、その機能を適切に使いこなす必要があります。
本書の長所として、JavaScript と TypeScript の基本的な文法を丁寧かつ体系的に解説している点が挙げられます。言語仕様について正確で詳細な説明があり、「なぜそうなるのか」を理解できるよう構成されています。また、コラムや注釈に小ネタが豊富で、読み物としても楽しめる内容となっており、実務で遭遇しやすい問題とその解決方法も具体的に提示されています。
たとえば、「letを避けてプログラムを読む人の負担を減らそう」というコラムがあります(P.33)。これは、TypeScriptにおける変数宣言はletよりもconstを使うべきという意見の紹介です。これ自体はJavaScriptかTypeScriptかにかかわらず、それどころかプログラミング言語全般に成り立つ話です。このようなよいプラクティスを丁寧に、かつ著者の知識と経験に基づいた形で紹介している点は、本書のよいところです。
さらに、「TypeScriptにおける数値はIEEE 754倍精度浮動小数点数である」というコラムでは、TypeScript(というよりはそのランタイムであるJavaScript)の数値型(number型)について、「精度」と「計算誤差」の観点からよくあるハマりどころを紹介しています。たとえば、 (0.1 + 0.2) === 0.3
は false
になりますが、これは小数の表現にIEEE 754を採用しているプログラミング言語(つまり、ほとんどすべてのプログラミング言語)にも当てはまります。このように、TypeScriptの入門と銘打ちながら、他の多くのプログラミング言語でも使える汎用性の高い知識を得られるのも本書のよいところです。
コーディングエージェントとうまく付き合うためには、コーディングエージェントを使う側に正確な知識が不可欠です。コーディングエージェントが「動くコード」を成果物として出してきた際に、その質の評価をしなければならないからです。本書の正確な知識と、「プロフェッショナルなコードを目指す」という矜持は、このコーディングエージェント時代でも必要不可欠です。
一方で留意すべき点もあります。JavaScript の基本的な構文に関する解説が多いため、JavaScriptを使い慣れている人にとっては既知の内容が多いかもしれません。また、型演算についての解説は少なめで、Symbol などの一部の機能は本書ではフォーカスしていません。そして、2022年出版のため、それ以降に追加されたTypeScriptの新しい機能については解説がありません。ただし、TypeScriptの新しい機能については著者の鈴木氏自身による補足「『プロを目指す人のためのTypeScript入門』読者が最新情報にキャッチアップできる記事」があります。
ところで、本書の著者はインターネットではuhyo氏としても知られており、JavaScriptやTypeScriptに関する情報発信(Zennの記事はこちら)を積極的に行っています。uhyo氏の技術記事は正確でわかりやすいことに定評があり、私もよく読んでいます。
▲『JavaScriptプログラマーのためのTypeScript厳選ガイド』藤吾郎 著、技術評論社
こちらは本記事の筆者(藤吾郎)による著書です。本書もまた、TypeScript の「よいコード」とは何かを、著者の確かな経験と知識に基づいて学べる一冊です。JavaScript の知識を前提としているため、TypeScript のコアな部分に特化した内容となっており、すでに JavaScript を使っている開発者が TypeScript を効率的に習得できるよう設計されています。
特に注目してほしいのは、型演算についての解説です。本書の後半では、型のテストを書くための Assert と、型の正しさを確認するための Equals という型ユーティリティを使って、一歩ずつ複雑な型演算を構築する手法を詳細に紹介しています。特に、コーディングエージェントに複雑な実装をさせる際は、コーディングエージェント自身がプログラムの正しさを確認できる必要があります。Assert と Equals を使うことで、コーディングエージェントに役に立つ正しい型演算のコードを書かせることができます。
留意すべき点もあります。網羅性よりも実践性を重視しているため、JavaScriptの文法についての基礎的な解説はありません。また、TypeScriptにおいても、使用頻度の低いenumのような機能については触れていません。
すでに JavaScript を使っている開発者が、TypeScript の型システムを最大限に活用したい場合に最適な一冊です。特に、型の高度な操作を学びたい方にお勧めします。
ところで、本書について筆者特権でいくつか補足があります。まず、TypeScript+ESMの運用については、本書の執筆時点では理想的な運用ができない状態だったため、解説が不十分でした。その後TypeScriptとNode.js両方に改善があり、理想的なTypeScript+ESMの運用ができるようになりました。これについては次の記事で解説しています。
Node.js (v24) では、TypeScript を特別なオプションなしで実行できるようになりました。型チェックのために引き続きTypeScript開発環境のセットアップは必要ですが、TypeScriptの開発は数年前よりずっと簡単にできるようになっています。ただし、現段階ではコーディングエージェントはこのあたりの最新状況を知らないので、上記記事のVS Codeとeslintの設定を有効するなどしてコーディングエージェントにとって作業しやすい環境を整える必要があります。
また、本書ではサードパーティ性のライブラリについてはまったく解説していませんが、オブジェクトの型と構造(“スキーマ”ということもあります)の実行時のチェックのために、Zodを紹介すべきだったなと思っています。TypeScriptは実行時の型チェックがまったくありませんが、Zodを使うことでそのギャップを埋められるからです。これは例えば、REST APIのレスポンスボディの構造をチェックしつつ安全に型を与えることができます。
import * as z from "zod"; // UserSchemaは、nameとageの2つのプロパティを持つオブジェクトを持つスキーマである const UserSchema = z.object({ name: z.string(), age: z.number(), }); // User = { name: string; age: number; } という型が得られる type User = z.infer<typeof UserSchema>; // fetch() などから得られた、型が不明な responseBody があるとする const responseBody: unknown = { name: "John", age: 30 }; // parse()すると型が不明なinputをUser型に安全に変換できる const user: User = UserSchema.parse(responseBody); console.log(user); // { name: 'John', age: 30 }
実行時の型チェックなのでオーバーヘッドはありますが、オーバーヘッド以上の恩恵は間違いなくあります。
▲『アルゴリズムクイックリファレンス 第2版』George T. Heineman、Gary Pollice、Stanley Selkow 著、黒川利明、黒川洋 訳、オライリー・ジャパン
エージェンティックコーディングの時代においても、アルゴリズム集はこれまで同様に重要です。なぜなら、コーディングエージェントに指示を出すためには、まずアルゴリズムを「知って」いる必要があるからです。知らないアルゴリズムについてコーディングエージェントに指示することはとても難しいのです。
本書は「クイック」というタイトルとは裏腹に、アルゴリズムの分析と評価についてかなり深掘りしています。単にアルゴリズムを羅列するのではなく、アルゴリズムを評価し、アルゴリズムのパフォーマンスを具体的なケースで理解できるよう構成されています。
特に優れている点は、日常的なプログラミングにおいて最も重要な「探索」について大きくページを割いていることです。ほとんどのソフトウェアエンジニアにとっては、「整列(ソート)」と「探索」が最も頻繁に使うアルゴリズムなので、序盤の解説の章と整列の章(4章)、探索の章(5章)だけでも十分に読む価値があります。
注意が必要な点として、プログラミング言語として疑似コード、C、C++、Java、Python を使用しており、特にCと疑似コードは読み解くのに苦労する可能性があります。また、通常は使わない古いクラスライブラリ(たとえば java.util.Hashtable)を例として使っていることがあるため、コードの良し悪しの評価はせず、純粋にアルゴリズムの解説として読む必要があるでしょう。
ところで、TypeScriptを使っている限り、アルゴリズムを実装しなければならないシチュエーションは非常に稀です。ほとんどは標準ライブラリで十分だからです。
そうであったとしても、アルゴリズムの「引き出し」を増やし、状況に応じて適切なアルゴリズムを選択できる力を身につけることは重要だと私は思います。すでに書いた通り、アルゴリズムという「語彙」がなければ、コーディングエージェントに指示を出すことは難しいですし、またコーディングエージェントが無造作に実装してきたアルゴリズムが、その状況で妥当かどうかを判断することも難しいからです。
コーディング作法に関する書籍も、アルゴリズム集と同様、必ず一冊は手元に置いておくべきです。エージェンティックコーディングの時代においても、よいコードの原則を「知っているかどうか」は、生成されるコードの品質に大きく影響します。
本書は、幅広いコーディング作法について触れた書籍で、変数名の付け方からアーキテクチャパターンまで、様々なレベルのコード品質に関するトピックをカバーしています。各原則の解説も妥当で納得感があります。
たとえば、DRY原則(Don’t Repeat Yourself)を奨励しつつも、「コードをまとめられそうだが、まとめるべきでない」ケースについても議論しています。その議論の中で触れている、「凝集度」が低い場合はまとめるべきでないという指摘はまさに正しく、原則を盲目的に適用するのではなく、状況に応じて判断する重要性を教えてくれます。
コーディングエージェントは複雑なコードを大量に書くことが得意なので、無造作にコードを書かせていると技術的負債を高速に生産してしまいます。こうした問題を避けるためにも、コーディング作法の知識を持ち、適切な指示を出せるようになること、そしてコーディングエージェントが生産したコードを正しく評価する技術を身につけることが重要です。
注意が必要な点として、記述言語が Kotlin であり、Kotlin 固有の事情が散見されます。たとえば sealed interface は TypeScript には存在しません。そのような言語固有の機能については、自分の使用言語に置き換えて読む必要があるでしょう。
コーディングエージェントと共に働く上で、コード品質を保ち、技術的負債を抑えるための必携書です。「知っている」原則を増やすことで、コーディングエージェントへの指示もより的確に出せるようになります。
本記事で紹介した4冊は、それぞれ異なる観点からTypeScriptプログラマーとしての「功夫」を深めるものです。TypeScript入門書2冊は言語の基礎から型演算まで、『アルゴリズムクイックリファレンス』は問題解決の語彙を、『良いコードの道しるべ』はコード品質の原則を提供します。これらの知識は、コーディングエージェントに的確な指示を出し、生成されたコードの妥当性を判断するための基盤となります。
エージェンティックコーディング時代において、ソフトウェアエンジニアの役割は「作業者」から「設計者・責任者」へと変化しています。コーディングエージェントが高速で実装を行う一方で、その実装が技術的負債を生まないか、システムの持続可能性を損なわないかを判断するのは人間の責務です。本記事で紹介した書籍から得られる知識と経験は、この新しい時代においてこそ、より重要な武器となるでしょう。
関連記事
人気記事