【GitHub Actions、Bash】curlでPOSTする時のJSONの書き方いろいろ

Code

はじまり

リサちゃん
リサちゃん

おおっ、GitHub Actionsだとそうなるんだ!

135ml
135ml

Bashかあ

リサちゃん
リサちゃん

エスケープしなくて良くなるなあ!

135ml
135ml

記法が少し増えるんだよなあ

curlコマンド

Bashのcurlコマンドは、APIにリクエストする時に便利なコマンドです。

そして、それを使って、JSON形式のデータをPOSTする方法は多岐にわたります。

GitHub Actionsを利用する方法も踏まえて、見ていきましょう。

基本の書き方

まず、基本的な書き方は、curlコマンドの-dオプションまたは--dataオプションを使用してJSONデータを直接書き込むことです。この際、Content-Typeヘッダーにapplication/jsonを指定する必要があります。

curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://example.com/api

データファイルを使用する

JSONデータが複雑になってくる場合、外部ファイルにJSONを保存して、-dオプションにファイルを指定することでPOSTデータとして使用できます。

data.jsonは、送信したいJSONデータを含むファイルのことです。

curl -X POST -H "Content-Type: application/json" -d @data.json https://example.com/api

jqを使う

jqはJSONを扱うためのコマンドラインツールであり、データ部を切り離して考えることが出来ます。

GitHub Actionsの実行環境ではjqがプリインストールされていて、すぐに利用できます。

jq -n '{key: "value"}' | curl -X POST -H "Content-Type: application/json" --data @- https://example.com/api

環境変数やシェル変数を使用する

シェルスクリプト内の変数や、GitHub Actionsの環境変数をJSONデータに含めることができます。これにはenvコマンドを利用したり、シェルの変数置換機能を活用します。

curl -X POST -H "Content-Type: application/json" -d "{\"key\": \"$YOUR_VARIABLE\"}" https://example.com/api

GitHub Actionsのシークレットや環境変数を利用する

しかし、$を使った記法は、ダブルクォーテーションをエスケープする必要性が出てきてしまいます。

僕が、GitHub Actionsを編集している時のリゾルバ的なやつに注意された時、結局どこが悪いのかが分からなくなったこととか普通にあります・・・。

そのため、GitHub Actionsを編集する際には、シェルスクリプト内の変数をJSONデータに含める際に、$を使った記法を使うよりも可読性が上がる書き方があります。

GitHub Actionsのsecretsを利用する場合の記法。

curl -X POST -H "Content-Type: application/json" -d '{"key": "${{ secrets.YOUR_SECRET }}"}' https://example.com/api

シェル内の環境変数利用する場合の記法はこんな感じです。

curl -X POST -H "Content-Type: application/json" -d '{"key": "${{ env.YOUR_SECRET }}"}' https://example.com/api

この書き方であれば、ダブルクォーテーションをエスケープする必要がなくなるので、読みやすいコマンドになってより安全により速くコードをチェックできますね。

まとめ

GitHub Actionsでcurlを使用してJSONデータをPOSTする方法は、シンプルなものから複雑なデータ構造を扱うものまで様々です。シナリオに応じて最適な方法を選択し、外部APIとの連携を効率的に行いましょう。

おしまい

リサちゃん
リサちゃん

なんだこれは視力検査かァ?

135ml
135ml

ただでさえ見にくいJSONを
さらに見にくいBashで編集する修行・・・

以上になります!

コメント

タイトルとURLをコピーしました