1978年4月に九州工業大学情報工学科に入学して初めてコンピュータに触れてから、さまざまなソフトウェア開発に従事してきました。しかし、大学・大学院での6年間や社会人になってからも、ソフトウェア開発におけるAPI(Application Programming Interface)設計とは何かを教えてもらったことはなく、試行錯誤してきました。今から思えば、最初のころはかなりひどいAPI設計を行っていたのではないかと思います。
たとえば、C言語で実装を隠ぺいするAPI設計の方法を覚えたのは、社会人となってから7、8年が過ぎたころでした。防御的プログラミングを始めたのは、社会人になってから15年もすぎたころでした。当然、それまでに設計したさまざまなソフトウェアでは、そのAPI仕様に防御的プログラミングを反映したような仕様は書いていなかったことになります。
防御的プログラミングを反映して、かなりきちんとAPI仕様を書いたのは、2000年に書いたC++用のメモリ管理ライブラリとスレッドライブラリでした。当時の富士ゼロックス社のデジタル複合機のコントローラソフトウェア開発用に作成したライブラリであり、現在も使われ続けています。
テスト駆動開発でソフトウェアを開発するようになったのは、2003年からです。デバイスシミュレータを開発することで、デジタル複合機のコントローラソフトウェアをテスト駆動開発で行うプロジェクトを2回経験しました。1回目は自分自身でも開発を行い、2回目は開発をリーディングしていました。これらの2つの開発では、テストファースト開発を行っており、テストファースト開発が私自身にとっては当たり前となっていました。
一方、私自身がWebサービスのバックエンドサービス開発に本格的に従事するようになったのは、2018年6月にメルペイ社へ入社してからであり、すでに58歳半ばとなっていました。Webサービス開発は未経験でしたが、過去2回のデジタル複合機のコントローラソフトウェア開発で行った経験を適用して、自分なりに考えて実践したことをまとめたものが本書です。実践した主なものは次のとおりです。
- API仕様ファースト開発
バックエンドサービスが提供するAPI仕様を最初にきちんと記述する
- テストファースト開発
API仕様に基づいて、バックエンドサービスが提供するエンドポイントを直接呼び出す自動テストを最初に書いて、失敗するのを確認してから実装する
- 長時間夜間ランニングテスト
エンドポイントを直接呼び出すテスト群を、自分の開発用PC(MacBook Pro)で夜間(つまり、寝ている時間)に、さまざまな動作パラメータを組み合わせて、繰り返し実行する(これは、コロナ禍で2020年2月以降、在宅勤務するようになってからです)
「API仕様ファースト開発」と「テストファースト開発」は、1つにまとめると次のようになります。
- バックエンドサービスが提供するAPI仕様を最初にきちんと記述し、そのAPI仕様に基づいてエンドポイントを直接呼び出す自動テストを整備しながら、実装を行うサービス開発
私自身が最初に開発したサービスを除いて、その後従事した既存のバックエンドサービスすべてで、このようなことは行われていませんでした。つまり、次のような状態でした。
- バックエンドサービスが提供するAPI仕様がきちんと記述されていない
- バックエンドサービスが提供するエンドポイントを直接呼び出す自動テストは整備されていない
それらの既存のサービスを改善した経験も踏まえて、今後、バックエンドサービス開発に従事するソフトウェアエンジニアが、優れた開発を行ってくれるようにまとめたものが本書です。
柴田芳樹(しばたよしき)
1959年生。九州工業大学および大学院で情報工学を専攻。1984年4月に富士ゼロックスに就職し,その後さまざまな会社でソフトウェア開発に従事。2024年4月より個人事業主として活動。2018年6月に,メルペイ(メルカリ子会社)でWebサービスのバックエンドサービス開発に従事してからは,「API仕様ファースト開発」によるGoおよびTypeScriptを用いたバックエンドサービス開発に従事している。
著書に『プログラマー“まだまだ”現役続行』(2010年,技術評論社),『ソフトウェア開発の名著を読む【第二版】』(2009年,技術評論社),『Java 2 Standard Edition 5.0 Tiger──拡張された言語仕様について』(2005年,ピアソンエデュケーション)。
訳書に『Effective Java 第3版』(2018年,丸善出版),『プログラミング言語Go』(2016年,丸善出版),『ベタープログラマ』(2017年,オライリー・ジャパン)『スーパーユーザーなら知っておくべきLinuxシステムの仕組み』(2022年,インプレス),『Go言語100Tips』(2023年8月,インプレス)ほか多数。
ブログ:https://yshibata.blog.ss-blog.jp
Twitter:@yoshiki_shibata