SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

SB C&S

CICDサイクルとwebhook

初心者向け
    2022.03.31

    【はじめに】

    こんにちは。SB C&Sの佐藤です。

    私は現在、元エンジニアという経歴を活かしたDevOpsやDXを推進するエンジニア目線でのプリセールスとして業務に従事しております。
    DevOpsやDXを実現する際によく耳にするキーワードの1つに「CICDサイクル」があります。改めてそれぞれの意味を大まかに説明すると、
     ・CI(Continuous Integration):継続的インテグレーション
      ∟コーディングが完了したソフトウェアに対し、自動でテストを行う
     ・CD(Continuous Delivery):継続的デリバリー
      ∟テストが完了したソフトウェアを、次の環境に配布する
    となっています。
    これらを実現することで開発工程が運用開始まで途切れず流すことができ、開発サイクルを迅速化する一助となります。また「スピード」を重要視するアジャイル開発にも効果的です。
    ソフトウェアが当たり前の存在となり生活に欠かせないものとなった今、顧客満足や企業価値を高めるには、日々変化する市場に対応することが不可欠です。そして作成したソフトウェアを正しく動かし続けることも大切です。こういった現状に対応していくためにも、開発と運用がCICDサイクルを活用しソフトウェア開発を進めていくことが不可欠となると考えます。

    今回はそんなCICDサイクルを実現させるために重要となってくる「webhook」について、よく一緒に語られるREST APIと絡めながら、解説していこうと思います。


    【webhookとは】

    webアプリケーションで特定のイベントが発生した場合に、そのイベントが発生したことをHTTPのPOSTリクエストを使用し、別のwebアプリケーションに通知する仕組みです。別名でイベントトリガと呼ばれることもあります。
    開発、インフラのどちらも利用することがある共通的な技術であると感じています。
    例)子供が改札を通過したタイミングで、あらかじめ登録されていた両親の携帯電話に通知を飛ばす
    イラスト1.png


    【CICDサイクルとの関連】

    CICDサイクルでは複数のプラットフォームを跨る場合も多いため、イベントトリガを多用します。「GitHubに対しコミットが行われた場合にJenkinsの特定のパイプラインを実行する」等です。
    例として、私が作成したパイプラインでは以下のようなGitHubに対し以下のようなwebhookの設定を行いました。


    githubno.png※PayloadURLについて
    webhookのPOSTリクエストを受信するサーバーのURLです。
    GitHubとJenkinsを連携する場合、以下のようになります。
    赤文字部分が各環境にあわせ修正が必要な値となります。

    payloadURL.png


    【REST APIとの相違点】

    よくwebhookとREST APIは動作として似ていますが、この2つには大きな違いがあります。
    REST APIでは手動でリクエストを行う必要があり、データが必要になったタイミングで都度クライアントからサーバに対しデータのリクエストを投げる必要があります。
    一方webhookeでは、あらかじめ登録されている契機(イベントトリガ)により、サーバ側からクライアント側に自動的にリクエストが送られます。
    「更新情報の取得」を例にすると、以下のように異なります。

    イラスト2.png
    イラスト3.png

    こうした例で見ると、webhookがより自動化されていることが分かります。そのためCICDサイクル等の「特定のイベント発生により自動的に次のイベントを発生させる」という流れを構築するのに適していると考えられます。
    ただし、何らかの原因でwebhookが送信されなかった(もしくは受信できなかった)場合は次イベントが発生しないので、この部分には注意が必要です。


    【おまけ:マイクロサービスとの関連】

    前述した通り、システム開発は今後更なるスピード感が求められます。その際に全てのアプリケーションを自前で用意するとなると構築も管理も多大な労力を要することになるというのは、想像に難いと思われます。また顧客要望が複雑化する現状において、今まで以上に複雑であったり、ユーザフレンドリーなUIが求められるといったことも考えられます。
    こういった場合でもシステム開発のスピードと質を担保させるために、小さな単独のアプリケーションを組み合わせて1つの大きなアプリケーションを作成する「マイクロサービス」が注目されています。アプリケーションをマイクロサービス化することで、
     ・専門的で複雑な処理は別サービスに任せる
     ・1つ1つの規模が小さいためモノシリックなアプリケーションと比べて改修規模が小さくなる
    といったこともメリットとして考えられます。
    そして複数のサービスを連携させる必要があるため、REST APIやwebhookを利用することで構築・運用・管理が容易になります。REST APIを利用し別サービスでの処理結果を取得したり、webhookを利用し自動的に他サービスと連動させることも可能です。


    【セキュリティについて】

    webhookは特に常にオープンにしてトークンが飛ばされるのを待つ必要があるので、APIに比べてもセキュリティが高いとは言い切れません。基本的には受け手のセキュリティレベルに依存することになりますし、また、なりすましが発生する可能性もあります。
    基本的な対策としては、
     ・パラメータ部に機密情報を含まない
     ・トークン内に識別情報を入れ要求元を確認する
    等「送受信するデータを安全なものにする」といった対策が挙げられますが、今後は更に
     ・デジタル署名を利用し送信元を完全に識別する
    といった、改ざん対策を含んだ対策が必要になってくると考えられます。
    ではAPIならセキュリティが万全かといえばそうではありません。外部との通信が増える分、チェックする部分も増えます。またデータを転送するため、webhook同様になりすましやハッキングも大いに考えられます。なのでAPIゲートウェイを使用する等、こちらも対策が不可欠です。
    個人的には今後、NFT等を利用した認証も今後出てくるのでは?と考えていますが、これらに関しては、また別記事で紹介させて頂ければと思います。


    【最後に】

    webhookもAPIも既存技術ではありますが、CICDサイクルやマイクロサービスが脚光を浴びる今、改めて注目されている技術であると考えます。セキュリティ面への注意は勿論必要ですが、利用すればソフトウェア開発に大きなメリットをもたらしてくれますので、是非皆様も活用してみてください。
    またCICDサイクルに関して言えば、サイクルを1つのプラットフォームで実現出来るようなソリューションも多く存在しますので、そちらも是非弊社HP(「他のおすすめの記事はこちら」を参照)をご確認ください。

    他のおすすめの記事はこちら

    著者紹介

    SB C&S株式会社
    テクニカルマーケティングセンター
    佐藤 梨花

    勤怠管理システムの開発(使用言語:Java)に約8年間従事。
    現在はエンジニア時の経験を活かしたDevOpsやDX推進のプリセールスとして業務に精励しています。