KrakenD

KrakenD v2.6 カスタムプラグイン開発ガイド – Go 1.22 と Dockerで高速構築

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

プラグインタイプと活用シーン

KrakenD が公式にサポートしているプラグインは 3 種類 です。リクエスト処理のどのフェーズでフックしたいかによって選択肢が決まります。

タイプ 主な用途 インターフェース例
Middleware 認証・ロギング・リクエスト前処理 func(*router.Handler) error
Request/Response Modifier ペイロード変換、ヘッダー付与、レスポンス加工 func([]byte) ([]byte, error)
Backend Proxy バックエンド呼び出し前後のカスタムロジック func(*proxy.BackendRequest) (*proxy.BackendResponse, error)

これらを組み合わせれば、ほぼすべてのビジネス要件に対するプラグイン構成が実現します。

v2.6 系で追加された機能

v2.6 以降では コンフィギュレーション拡張動的ロード が強化され、プラグインのバージョン管理や環境変数によるパス指定が公式にサポートされました。

  • plugin.path${KRAKEND_PLUGIN_PATH} などの環境変数を書けるようになり、CI/CD パイプラインでの柔軟なデプロイが可能に。
  • Init 関数へ context.Context が渡され、プラグイン側で実行時設定やシークレット情報を取得できる。
  • 公式ドキュメント: https://www.krakend.io/docs/extending/writing-plugins/

これにより、ビルド時にパスをハードコードする必要がなくなり、ステージごとのプラグイン差し替えがシンプルになります。


Go 環境の構築とモジュールバージョン合わせ

KrakenD v2.6.x は Go 1.22 系 と互換性があります。正しい Go バージョンと go.mod の設定を揃えることで、ビルドエラーやリンク不整合を防げます。

Go 1.22 のインストール方法

以下は Linux/macOS 環境で asdf を使って 1.22.4 以上を導入する手順です。goenv や公式バイナリでも同様に適用できます。

インストール後は go envGOROOTGOPATH が期待通り設定されていることを必ず確認してください。

go.mod の記述例

プラグインプロジェクトの go.mod は KrakenD 本体と同一バージョンを明示し、Go バージョンは 1.22 系に固定します。これによりビルドモード c-shared 時のシンボルテーブル不整合が回避できます。

go mod tidy 後に go list -m all でバージョンが揃っていることを確認し、CI 環境でも同一モジュールキャッシュが使われるようにします。


プラグイン実装・ビルド手順 と Docker マルチステージ化

プラグインは Go の c‑shared ビルドで .so ファイルを生成し、Docker のマルチステージ構成でイメージサイズを最小化します。

.so ファイルの作成

プラグインは package main とエントリポイント Init を持ちます。以下は Middleware のシンプルな雛形です。

ビルドコマンドは次の通りです(Linux/AMD64 用):

生成された .so は実行環境と同じアーキテクチャであればそのまま使用できます。

Dockerfile のマルチステージ例

以下は builder ステージでプラグインをビルドし、runtime ステージで KrakenD 本体に組み込む構成です。最終イメージは約 30 MB に抑えられます。

ビルドは次のコマンドで完了します。


KrakenD 設定へのプラグイン登録とエラー設計

プラグインを有効化するには krakend.jsonplugin セクションを追加し、必要に応じてカスタムエラー型を実装します。

krakend.json の plugin 設定例

環境変数でパスを外部化すれば、ステージごとに異なるプラグインバイナリを差し替えることができます。以下は基本的な設定例です。

KRAKEND_PLUGIN_PATH は Dockerfile の ENV や Kubernetes の ConfigMap で設定できます。

環境変数でのパス動的設定

Docker と Kubernetes の両方で同一 krakend.json を使う場合は、コンテナ起動時に環境変数だけを書き換えるだけです。KrakenD は指定ディレクトリ内の .so ファイルを自動的にロードします。

この方式ならプラグインのバージョンアップや A/B テスト時に ConfigMap の内容だけ差し替えれば済みます。

カスタムエラー型の実装例

KrakenD は error インターフェースに加えて、StatusCode() int メソッドが定義されていると自動的に HTTP ステータスコードへ変換します。以下はシンプルなカスタムエラー構造体です。

プラグイン内でエラーを返す例:

このパターンに従うと、エラーハンドリングが一元化され、テストもしやすくなります。


テスト戦略と CI/CD パイプライン

品質保証は ユニットテスト統合テスト自動デプロイ の流れで構築します。以下に具体的な実装例を示します。

ユニットテストの書き方(testing + gomock)

Init が正しくハンドラをラップできているかを検証するテストです。外部依存はモック化して高速に実行できます。

go test ./... -cover でカバレッジを測定し、最低 80 % を目標にすると CI の信頼性が向上します。

Docker Compose での統合テスト

プラグインが実際にロードされ、エンドポイントが期待通りに動作するかを検証します。docker-compose.yml に KrakenD とモックバックエンドを定義し、スクリプトでリクエストを送ります。

テストスクリプト(ci/integration_test.sh):

CI ジョブ内でこのスクリプトを実行すれば、プラグインのロード失敗や設定ミスを早期に検出できます。

GitHub Actions ワークフロー例

以下は テスト → Docker ビルド → イメージプッシュ → Helm デプロイ までを自動化した ci.yml の抜粋です。キャッシュとマトリクスを活用し、ビルド時間を最適化します。

このフローにより、コード変更から本番デプロイまで 数分 で完了し、手作業によるミスを大幅に削減できます。

Helm デプロイとタグ戦略

OCI レジストリには latest とバージョン番号(例: v1.0.0)の二重タグを付与します。Helm の values.yaml で画像情報をパラメータ化すれば、ロールバックやステージング環境への差し替えが容易です。

ステージングにデプロイする際は --set image.tag=v1.2.3 と指定すれば、特定リビジョンのイメージだけを切り替えられます。


記事全体のまとめ

  • プラグインタイプ:Middleware・Request/Response Modifier・Backend Proxy の三種が公式サポート。v2.6 以降は環境変数で動的ロード可能。
  • Go 環境:Go 1.22 系を使用し、go.mod で KrakenD 本体と同一バージョンを明示することがビルド成功の鍵。
  • ビルド手順go build -buildmode=c-shared により .so を生成し、マルチステージ Docker で軽量イメージ化。
  • 設定とエラー設計krakend.jsonplugin セクションに環境変数パスを記述し、カスタムエラーは StatusCode() を実装して HTTP コードへマッピング。
  • テスト・CI/CD:Go ユニットテスト+Docker Compose 統合テストでプラグインロードを検証し、GitHub Actions と Helm で自動ビルド・デプロイを一貫化。
  • デプロイ戦略:OCI タグ付けと Helm のパラメータ化により、バージョン管理とロールバックがシンプルになる。

上記の手順とベストプラクティスを踏めば、最新の KrakenD(v2.6 以降)向けカスタムプラグインを 安全・高速・自動 に開発・デプロイできるようになります。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-KrakenD