コース一覧
    Go実践:並行処理とWeb API
    Node版と差し替える

    Go実践:並行処理とWeb API

    Goの並行処理とWeb API開発を組み合わせ、実践的なサービス構築へ進むコースです。

    1
    ゴルーチンと並行処理のさわり
    01. ゴルーチン15分
    02. チャネル20分
    03. 待ち合わせ20分
    04. 並行の落とし穴20分
    05. つくる: 並行集計20分
    06. 第7章クイズ10分
    2
    Web API(net/http)
    01. サーバーを立てる20分
    02. ハンドラ関数20分
    03. JSONを返す20分
    04. ルーティング20分
    05. 一覧API20分
    06. 詳細APIと40420分
    07. 出品API20分
    08. つくる: API主要部完成25分
    09. 第8章クイズ10分
    3
    総合制作
    01. 仕様互換を仕上げる25分
    02. Node版と差し替える25分
    03. 1バイナリでデプロイ25分
    04. 自由拡張25分
    05. 完成と次のステップ20分

    Node版と差し替える

    中身を入れ替えても気づかれない

    前のレッスンで、仕様どおりの API ができました。同じ仕様の実装が2つある状態です。

    プレーンテキスト

    fleama API (Node.js)   いま動いているもの
    fleama-go (Go)         いま作ったもの

    差し替えとは、使う側を一切変えずに、裏側だけを入れ替えることです。

    プレーンテキスト

    React アプリ → fetch("/items") → [Node版]
    React アプリ → fetch("/items") → [Go版]     ← 変えたのはここだけ

    フロント側のコードは1行も触りません。触る必要があるなら、それは互換ではなかったということです。

    一致を機械で確かめる

    「同じはず」で切り替えると事故ります。同じリクエストを両方に投げて、応答を突き合わせます。

    プレーンテキスト

    GET /items          両方の応答が一致するか
    GET /items/1        一致するか
    GET /items/99       404 と本文が一致するか
    POST /items 検証NG   400 と理由が一致するか

    見るのは3つです。

    プレーンテキスト

    ステータスコード
    応答の本文(1文字単位)
    ヘッダ(Content-Type など)

    成功する場合だけ確かめて安心しないでください。差が出やすいのは、むしろ失敗のときです。エラーの文言、404 の形、検証の順番。ここが揃っていないと、使う側の分岐が壊れます。

    よくある食い違い

    実際に作り直すと、次のあたりでずれます。

    プレーンテキスト

    0件のとき      null と []
    数値の表現     1200 と "1200"
    キーの順番     言語やライブラリによって変わることがある
    日時の形式     Node と Go で既定が違う
    末尾の改行     Encode を使うと付く

    どれも第8章で触れたものです。細部が全部合って初めて互換になります。

    切り替えの進め方

    実務では、一度に全部を切り替えません。

    プレーンテキスト

    1. 両方を動かし、同じリクエストを両方に流して比べる
    2. 一部のリクエストだけ Go 版に向ける
    3. 問題が無ければ割合を増やす
    4. 全部を切り替え、Node 版を止める

    途中で戻せるようにしておくのが要点です。戻せない切り替えはやらない、というのが、この種の作業の原則になります。

    この演習でやること

    2つの実装の応答を比べる関数を書きます。差し替えの前に必ずやる作業を、そのまま小さくしたものです。

    要件

    1. callGo を呼んで Go 版の応答を得る
    2. Node 版の応答と1文字単位で比べる
    3. 一致したら 一致 を返す
    4. 違ったら 不一致 期待=<Node版> 実際=<Go版> を返す

    ヒント

    `goResponse := callGo(method, path, body)` で Go 版の応答を得ます

    比較は `==` で1文字単位です。JSON として解釈し直す必要はありません

    不一致のときの形は `不一致 期待=%s 実際=%s` です。期待が Node 版、実際が Go 版です

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • 1バイナリでデプロイ

      go buildで作った1つのバイナリをサーバーに置き、常駐させる手順を説明できるようになります。

    • 自由拡張

      欲しいAPIを自分で設計して実装し、並行処理を活かした集計APIを1本作れるようになります。

    • 完成と次のステップ

      fleama-goの完成を確かめ、次に学ぶものを自分で選べるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
    • APIアプリ間でデータをやり取りする窓口
    • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
    • 関数処理に名前を付けて再利用できる単位
    main.go
    エディタを読み込んでいます

    メモ

    Node版と差し替える

    ⌘S で保存