前の10件 | -
予約受付開始『Go言語で学ぶ並行プログラミング』 [本]
技術書の翻訳としては22冊目となる『Go言語で学ぶ並行プログラミング』の予約をAmazonで受付始めました。
Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプラクティス (impress top gear)
- 出版社/メーカー: インプレス
- 発売日: 2024/12/04
- メディア: 単行本(ソフトカバー)
2024-09-21 10:55
コメント(0)
API仕様:備忘録(001) [API仕様を書く]
まったく分類・整理していませんが、ランダムにWebサービスのバックエンドのAPI仕様に関する備忘録を書いていきたいと思います。
この記述を書いた本人は分かっているつもりなのかもしれませんが、第3者が読んだら理解できなくて問い合わせることになります。これは、記述した仕様が第3者が理解できるかという視点を持たないことによるものだと思われます。その視点で、自分で記述した仕様をレビューできる必要があります。
一般的にXXXYYYStatusというのはenumとして定義されている可能性があり、その場合、「XXXYYYStatus順」というのは、具体的に何順なのかが曖昧です。enumの個々の値の型としては、数値(gRPCなど)の場合もあれば、文字列の場合もあります。
「XXXYYYStatus順」というのは、おそらく次のことを意味していますが、明確に記述する必要があります。
001 該当する定義が存在しない
問題:あるデータの一覧を返すエンドポイントの仕様に、「返されるデータはXXXYYYStatus順に返される」と記述されているのですが、そもそもXXXYYYStatusはどこにも定義されていない。この記述を書いた本人は分かっているつもりなのかもしれませんが、第3者が読んだら理解できなくて問い合わせることになります。これは、記述した仕様が第3者が理解できるかという視点を持たないことによるものだと思われます。その視点で、自分で記述した仕様をレビューできる必要があります。
一般的にXXXYYYStatusというのはenumとして定義されている可能性があり、その場合、「XXXYYYStatus順」というのは、具体的に何順なのかが曖昧です。enumの個々の値の型としては、数値(gRPCなど)の場合もあれば、文字列の場合もあります。
「XXXYYYStatus順」というのは、おそらく次のことを意味していますが、明確に記述する必要があります。
- enumとして定義されている順
Web API設計実践入門──API仕様ファーストによるテスト駆動開発 Web+DB PRESS plusシリーズ
- 作者: 柴田 芳樹
- 出版社/メーカー: 技術評論社
- 発売日: 2024/07/25
- メディア: Kindle版
2024-07-14 06:39
コメント(0)
書籍『Web API設計実践入門』目次 [API仕様ファースト開発]
Web API設計実践入門──API仕様ファーストによるテスト駆動開発
- 作者: 柴田 芳樹
- 出版社/メーカー: 技術評論社
- 発売日: 2024/07/25
- メディア: 単行本(ソフトカバー)
はじめに
第1章 ソフトウェアテストの変遷
1.1 1990年代までと2000年代のソフトウェアテスト
目視確認が普通だった
自動テストの普及
手動によるテストでは,ソフトウェアが腐る
1.2 フィードバックループを短くする
テストとフィードバックループ
テストとフィードバックループ
テストファースト開発
1.3 ビッグバンインテグレーションから継続的インテグレーションへ
ビッグバンインテグレーション
夜間ビルド
継続的インテグレーション
1.4 まとめ
第2章 API仕様
2.1 APIとは
フレームワークや標準ライブラリのAPI仕様
企業内でのAPI仕様
2.2 優れたAPI仕様とは
理解が容易
変更が容易
テストが容易
2.3 API仕様でよくある問題点
API仕様が記述されていない
エラーの説明が記述されていない
API仕様に基づく自動テストコードが存在しない
2.4 API仕様に書くべきこと
サービスの概要の説明
個々のエンドポイントの説明
エラーの説明
2.5 API仕様とE2Eテスト
2.6 まとめ
第3章 gRPCにおけるAPI仕様の書き方
3.1 gRPCとは
3.2 API仕様をどこに書くか
3.3 サービスの概要の記述
3.4 個々のエンドポイント(RPC)の説明
3.5 エラーの説明
パラメータの不正
誤った順序での呼び出し
認証や認可のエラー
サービスの概要に書くべきそのほかのエラー
個々のエンドポイントに書くべきそのほかのエラー
書く必要がないエラー
3.6 リストオプションの説明
3.7 まとめ
第4章 API仕様ファースト開発
4.1 開発順序
API仕様の記述
E2Eテストフレームワークの検討と実装
テストコードの作成と機能の実装
リファクタリングとカバレッジの確認
Pull Requestのレビュー
4.2 不具合の修正順序
再現テストの作成と実装の修正
リファクタリングとカバレッジの確認
4.3 既存のエンドポイントの修正と新たなエンドポイントの追加
4.4 API仕様のエンドポイントを呼び出すE2Eテストの利点
4.5 まとめ
第5章 E2Eテストフレームワークの構築
5.1 テストフレームワークの基本的な考え方
本番環境と同じバイナリ
カバレッジの取得
5.2 マイクロサービス構成でのテストフレームワーク
書きたいテスト
E2Eテストフレームワークのプロセス
依存サービスが外部サービスの場合の解決方法
エラーのテストは簡単
5.3 非マイクロサービス構成でのテストフレームワーク
5.4 E2Eテストフレームワークの骨格
Test Suiteプロセスの骨格
テスト対象マイクロサービスの骨格
フェイクマイクロサービスの骨格
テストコードの骨格
そのほかの考慮項目
5.5 まとめ
第6章 API仕様の技術的負債の返済
6.1 APIの技術的負債とは
E2Eテストフレームワークの構築が重要
ソフトウェアエンジニアとしても重要
ソフトウェア開発組織としての強い目標
6.2 API仕様の負債の返済
既存のエンドポイントを修正するケース
新たなエンドポイントを追加するケース
既存のエンドポイントの不具合を修正するケース
6.3 返済順序のまとめ
6.4 E2Eテストのもう1つの利点:リファクタリング
6.5 E2Eテストと単体テスト
E2Eテストは必須
テストデータの準備
データの準備でつまずく
6.6 API仕様ファースト開発が定着した組織
6.7 まとめ
第7章 Go言語によるE2Eテストフレームワークの実装
7.1 E2Eテストの基本的な流れ
Test Suiteプロセスの流れ
7.2 courierライブラリの構成とインストール
インストールと動作確認
7.3 サンプルサービスの構成と定義
サンプルサービスの構成
Shopサービスの.protoファイル
.protoファイルのコンパイル
サンプルサービスで実現したいテスト
7.4 E2Eテストコードの例
InvalidArgumentエラーのテストコード
newShopClient()関数の実装
テストの実行
7.5 E2Eテストフレームワークの流れ
フェイクサービスの実行
テスト対象サービスの起動
テスト対象サービスの準備待ち
テストの実行
テスト対象サービスの終了
7.6 フェイクサービスの構築
フェイクサービスの自動生成
自動生成されたフェイクサービスのコード
7.7 テスト実行までの流れとテストコードの実装
TestMain関数
テスト対象サービスが依存する環境変数
テスト対象サービスの呼び出しとテストの実行
Makefile
テスト関数の実行
テスト終了の通知
カバレッジの表示
7.8 テストの並列化サポート
TIDの伝搬
7.9 ほかのテスト関数の例
DeadlineExceededエラー/Canceledエラー
正常ケース
SetListProductInventoriesResponseCreator
7.10 テスト関数に合格するサーバ実装
7.11 外部サービスのフェイクサービス
Google PubSubのPublisherサービス
REST APIのサービス
7.12 E2Eテストでのデータの準備
エンドポイント経由でのデータ準備の利点
7.13 ステージング環境や本番環境に対するE2Eテスト
7.14 まとめ
付録A Goのテストの並列化
複数パッケージのテストを並列に実行する
t.Parallel()メソッド
並列化での注意点
まとめ
付録B 長時間夜間ランニングテスト
過去の経験
長時間ランニングテスト
まとめ
付録C 防御的プログラミング
防御的プログラミングとは
防御的プログラミングとAPI仕様
2024-06-13 04:54
コメント(0)
書籍『Web API設計実践入門』 [本]
Web API設計実践入門──API仕様ファーストによるテスト駆動開発
- 作者: 柴田 芳樹
- 出版社/メーカー: 技術評論社
- 発売日: 2024/07/25
- メディア: 単行本(ソフトカバー)
発売日は、多少変動するかもしれませんが、私にとって6冊目となる自著です。
『WEB+DB PRESS Vol.134』で書いた特集記事1に加筆・修正したものです。さらに、過去に講演で話した内容やいくつかのTech Blogも加筆・修正したものを含めています。
2024-05-23 05:42
コメント(0)
Kindle版が販売終了になっている書籍 [本]
私が翻訳した以下の書籍は、Kindle版が購入可能な時期もありましたが、現在は販売終了になっており、購入できません。
APIデザインの極意 Java/NetBeansアーキテクト探究ノート
- 出版社/メーカー: インプレス
- 発売日: 2014/05/23
- メディア: 単行本(ソフトカバー)
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: 単行本(ソフトカバー)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- 出版社/メーカー: 丸善出版
- 発売日: 2016/06/20
- メディア: 単行本(ソフトカバー)
2024-05-11 06:35
コメント(0)
14年ぶりの自著 [プログラマー現役続行]
技術書の翻訳本は20冊以上行ってきましたが、自分で執筆する本は2012年9月に出版した『"プログラマー"まだまだ"現役続行』が最後でした。紙の本は絶版ですが、Kindle版やPDF版で今でも読むことができます。
最終的な発売日は未定ですが、14年ぶりに自著としての技術書を出版します。内容は、58歳から経験してきたWebサービスのバックエンドサービスに関して、「API仕様ファースト開発」をまとめたものとなります。
最終的な発売日は未定ですが、14年ぶりに自著としての技術書を出版します。内容は、58歳から経験してきたWebサービスのバックエンドサービスに関して、「API仕様ファースト開発」をまとめたものとなります。
2024-04-24 05:02
コメント(0)
4月から(少し)働きます(その後) [プログラマー現役続行]
「4月から(少し)働きます」では、会社勤めを終えて、個人事業主として働くということを書きました。その時点は、業務委託で少し働く予定でした。しかし、フルタイムで働いていないので、業務委託で働くことを打診されて、働くことになりました。次の2社で業務委託でソフトウェア開発に従事します。
- Digital Platformer(2024年4月1日〜)
- カウシェ(2024年4月22日〜)
2024-04-23 04:19
コメント(0)
書籍『お金のこと何もわからないままフリーランスになっちゃいましたが税金で損しない方法を教えてください! 』 [本]
お金のこと何もわからないままフリーランスになっちゃいましたが税金で損しない方法を教えてください! (サンクチュアリ出版)
- 出版社/メーカー: サンクチュアリ出版
- 発売日: 2018/11/08
- メディア: 単行本(ソフトカバー)
社会人になって40年間続けた会社勤めを終えて、4月から個人事業主として開業届を出しました。初めてのことなので、どこから学んでいけばよいのか分からなかったので、とりあえず読み始めた本の中の1冊です。個人的には、インボイス制度のところは今もモヤッとはしていますが、マンガで税について説明してくれており、とても読みやすくお勧めの本です。
ただ、以下の点も書いてあると良かったかなと思います。
- 国民健康保険を役所の窓口で行うと、その場で健康保険証をもらえること
- 個人事業主の開業届では、必ず税務署の受領印が押された開業届の控えを持っておくこと
健康保険証
会社勤めとして9社で働いた経験からすると、転職するごとに新たな会社が属している健康保険組合に変更になります。その際に、新たな健康保険証が届くのが1、2週間後ということがほとんどです。そのため、国民健康保険も健康保険証の発行に時間を要すると勝手に思い込んでいたのですが、横浜市青葉区の区役所の窓口に申請書類を提出したら、その場で発行(印刷)されて、持って帰ることができました。個人事業主の開業届の控え
個人事業主の開業届ですが、別の書籍で開業届けの控えが必要な場合があることが書かれていたので、税務署まで行って、受領印が押された控えをもらってきました。この本で紹介されている「小規模企業共済」への申し込みには、個人事業主としての確定申告書の控えが必要なのですが、開業当初はそのようなものはありません。その場合、小規模企業共済のホームページには「事業を始めたばかりで確定申告書がない場合:開業届の控え」と書かれていました。
2024-04-15 09:11
コメント(0)
4月から(少し)働きます [プログラマー現役続行]
4月から知り合いの会社の開発組織を手伝うということで、週に2日あるいは3日、リモートで働きます。
令和トラベルを退職して行ったこととして、以下のことを行いました。
郵送での申請でも可能なのですが、必要書類を準備してから横浜市青葉区の区役所へ出向いて、保険年金課で申請しました。申請したら、その場で国民健康保険の健康保険証が発行されて、もらって帰ることができました。
こどのも国のそばに暮らし始めてから20年以上が経過していますが、今までは数えるほどしか行ったことがありませんでした。普段の心臓リハビリテーションとしては、天気が悪い日は家でエアロバイク、天気が良い日はウォーキングをしててきたのですが、仕事しながらだとどうしても朝10時のミーティングに間に合うようにしないといけませんでした。
これからは、時間的に余裕があるので、ウォーキングコースにこどもの国を入れたいと思い、こどもの国の「ウィークデーパスポート」(3,000円/年)を購入しました。
申し込み書と代金を窓口に出すと、引き換え証をもらえるので、それで入園できます。帰りに案内所で引き換え証と交換でウィークデーパスポートをもらえます。
こどもの国は水曜日は休園日なので、実質的に週4日しか使えません。ただ、季節によっては水曜日も休園しない日があります。
令和トラベルを退職して行ったこととして、以下のことを行いました。
- 国民健康保険の手続き
- こどもの国のウィークデーパスポートの購入
郵送での申請でも可能なのですが、必要書類を準備してから横浜市青葉区の区役所へ出向いて、保険年金課で申請しました。申請したら、その場で国民健康保険の健康保険証が発行されて、もらって帰ることができました。
こどのも国のそばに暮らし始めてから20年以上が経過していますが、今までは数えるほどしか行ったことがありませんでした。普段の心臓リハビリテーションとしては、天気が悪い日は家でエアロバイク、天気が良い日はウォーキングをしててきたのですが、仕事しながらだとどうしても朝10時のミーティングに間に合うようにしないといけませんでした。
これからは、時間的に余裕があるので、ウォーキングコースにこどもの国を入れたいと思い、こどもの国の「ウィークデーパスポート」(3,000円/年)を購入しました。
申し込み書と代金を窓口に出すと、引き換え証をもらえるので、それで入園できます。帰りに案内所で引き換え証と交換でウィークデーパスポートをもらえます。
こどもの国は水曜日は休園日なので、実質的に週4日しか使えません。ただ、季節によっては水曜日も休園しない日があります。
2024-03-27 05:21
コメント(0)
バックエンドサービスのテストコード [API仕様ファースト開発]
バックエンドサービスを開発する際に、そのバックエンドサービスがデータベースと接続して独自のデータを保持していることが多いです。そのようなバックエンドサービスをテストするためのテーストコードの作成において、テスト対象の機能をテストするために、事前にデータベースへデータを設定する必要があります。
API仕様ファースト開発でE2Eテストフレームワークを構築してからE2Eテストを作成する場合、サービスを一から開発するのであれば、最初はある程度、データベースへ直接データを設定する必要があります。なぜなら、必要なデータを設定するためのエンドポイントがまだ実装されていないかもしれないからです。ある程度エンドポイントの実装が進めば、既存のエンドポイントを呼び出してデータを整備することが可能になっていきます。
しかし、単体テストや内部の機能テストとして、テストコードを作成すると、必要なデータをテストコードから直接データベースへ設定してテストが作成されることも多いと思います。そして、すべてのテストが同じように作成されてしまうこともあるかと思います。
テストコードで以下の処理を行っていると、テストを並列に実行できません。
このような処理を行っているテスト群を作り続けていると、テストを並列実行できずに、逐次実行していく必要があるため、すべてのテストの実行が完了するのに30分を超えてしまうことも珍しくなくなります。
API仕様ファースト開発でE2Eテストフレームワークを構築してからE2Eテストを作成する場合、サービスを一から開発するのであれば、最初はある程度、データベースへ直接データを設定する必要があります。なぜなら、必要なデータを設定するためのエンドポイントがまだ実装されていないかもしれないからです。ある程度エンドポイントの実装が進めば、既存のエンドポイントを呼び出してデータを整備することが可能になっていきます。
しかし、単体テストや内部の機能テストとして、テストコードを作成すると、必要なデータをテストコードから直接データベースへ設定してテストが作成されることも多いと思います。そして、すべてのテストが同じように作成されてしまうこともあるかと思います。
データベースへの直接設定する問題点
テストコードからデータベースへ直接レコードを挿入する場合、サービスの成長い伴ってテーブルが発展していく際に、以下の問題が発生します。- レコードのカラム変更(追加、削除、型の修正、etc)が行われた際に、すべてのテストコードが正しく対応できていない可能性がある
- エンドポイント経由ではないため、正しくないレコードが作られている可能性がある
テストを並列に実行できない要因
バックエンドサービスの機能が増えていけば、テストコードも増えてきます。エンドポイントを直接呼び出すE2Eテストであれば、テストコードを並列に実行しても問題ないはずです。しかし、個々のテストが必要なデータを直接データベースへ設定するテスト群では、並列に実行できない場合があります。テストコードで以下の処理を行っていると、テストを並列に実行できません。
- レコードをINSERTする際に、プライマリーキーをハードコードして指定している
- テーブルが空である必要があるテストとなっており、個々のテストの実行で、最初にテーブル内のレコードをすべて削除している
save()
を呼び出した際に、すでにレコードが存在していれば更新になってしまいます。このような処理を行っているテスト群を作り続けていると、テストを並列実行できずに、逐次実行していく必要があるため、すべてのテストの実行が完了するのに30分を超えてしまうことも珍しくなくなります。
まとめ
私自身は、バックエンドサービスを開発してきて、開発を担当するサービス用のテストコードへの信頼を失うような開発はしたくないですし、手元の開発マシンですべてのテーストを短時間に実行しながら開発するのを好みます。つまり、テストコードからデーターベースへ事前データを直接設定するのは避けた方がよいですし、テストコードは並列に実行できた方がよいです。2024-03-15 07:29
コメント(0)
前の10件 | -