【GitHub Actions、Bash】「curl: (3) URL using bad/illegal format or missing URL」「curl: (3) nested brace in URL」といったエラーメッセージが出た時に試したこと
はじまり




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/apijqを使う
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/apiGitHub 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との連携を効率的に行いましょう。
おしまい


以上になります!
記事を共有
この記事が役に立ったなら、ぜひ他の人と共有してください!