curl とは?初心者でもわかる基本機能と実務での活用方法

API開発

curl とはどんなツールか

皆さんは curl とは 何だろうと疑問に思うことはないでしょうか。 これは、コマンドライン上で手軽にデータをやり取りできるツールです。 例えば、HTTPリクエストを送ってWebサイトの情報を取得したり、APIにアクセスしてレスポンスを確認したりできます。 ネットワーク越しにファイルをダウンロードすることもできますし、反対にアップロードもできます。 LinuxやmacOSには標準でインストールされている場合が多く、Windowsでも簡単に導入できます。 最新のバージョンは curl 8.x がリリースされていて、セキュリティ面や新機能が随時更新されています。

初心者の方にとっては、コマンドライン自体が少しとっつきにくく感じるかもしれませんね。 しかし、curlでできることを一つひとつ学んでいくと、Webサービスの仕組みやAPIの扱い方に自然と慣れていくのではないでしょうか。

基本的な使い方とHTTPリクエストの送信

まずは、curlで最もよく使われるHTTPリクエストについて見ていきましょう。 単純にWebページのHTMLを取得する方法を例として挙げると、以下のようなコマンドを実行します。

curl https://example.com

このコマンドで、指定したURLのページ内容を標準出力へ表示できます。 ブラウザで見るHTMLは目に見やすい形に整形されていますが、curlで取得すると生のソースコードが表示されることが特徴ですね。 次に、APIなどへアクセスする際に使うGETリクエストを送る場合も、基本は同じコマンドです。 クエリパラメータを付けるときもURLにそのまま追加すれば大丈夫です。

また、レスポンスヘッダだけを確認したいときは -I オプションが便利です。 例えば、HTTPステータスコードやサーバー情報などを素早くチェックできます。 開発やデバッグのシーンでとても役に立ちますね。

POSTリクエストとフォーム送信の実例

APIにデータを送信する場面では、POST リクエストを活用することが多いでしょう。 curlならば -X POST オプションに加え、送信するデータを -d で指定します。

curl -X POST -H "Content-Type: application/json" \
  -d '{"name": "Tanaka", "email": "tanaka@example.com"}' \
  https://api.example.com/users

この例では、JSON形式のデータをHTTPボディに含めて送信します。 ヘッダとしてContent-Typeを指定することで、サーバー側が受信フォーマットを正しく認識してくれます。 フォームデータを送る場合は、-F オプションを使って multipart/form-data 形式で送る方法もあります。

実務では、ユーザー登録やログイン機能のテストをするときにこの機能を使うことが多いですね。 ブラウザでフォームを入力しなくても、プログラムと同じような形で簡単にテストできる点が魅力です。

ファイルのダウンロードとアップロード

curlはHTTPだけでなくFTPやSFTPなどにも対応しているので、ファイル転送にもよく使われます。 シンプルにファイルをダウンロードする場合は、次のように -O オプションを使います。

curl -O https://example.com/files/sample.zip

これで、ダウンロードしたファイルを sample.zip という名前で保存できます。 一方で、ファイルをサーバーへアップロードしたい時には、例えばFTPサーバーを対象に以下のように書きます。

curl -T localfile.zip ftp://example.com/uploads/

ここでは、localfile.zip をアップロードしています。 IDやパスワードが必要なサーバーであれば、-u ユーザー名:パスワード の形で認証情報を指定できます。 実務でログファイルを共有したり、レポートをアップロードしたりと、幅広い用途で活躍するのではないでしょうか。

認証やセキュリティ関連のオプション

今のWeb開発では、APIトークンやOAuthなどさまざまな認証方式が利用されていますね。 curlは、そうした認証ヘッダを自分で追加することができるので、テストやデバッグの場面で役立ちます。 例えば、Bearerトークンを使う場合は以下のように指定します。

curl -H "Authorization: Bearer YOUR_TOKEN_HERE" \
     https://api.example.com/protected

さらに、HTTPSを使うときの証明書検証が必要な場面もあるかもしれません。 既定ではcurlはSSL証明書を検証しますが、自作証明書の場合などで検証が通らないときは --cacert で証明書を渡すことができます。 一方で --insecure オプションを使うと証明書エラーを無視できますが、安全な方法ではないので注意したいですね。 セキュリティは実務上とても大切ですし、curlのオプション設定を誤ると思わぬリスクに繋がるかもしれません。

開発・運用現場での具体的な活用シーン

実際の仕事の中でどのような場面でcurlが使われるのかを考えてみましょう。 例えば、新しく作ったREST APIの動作を素早く確認したいときに有用ですね。 サーバーとの通信が意図した通りに動いているかどうか、レスポンスが正しく返ってきているかを即座に確かめられます。

また、外部サービスと連携するシステムを開発している場合に、認証トークンや特定のヘッダが正しく処理されているかを確かめるのにも便利です。 インフラやDevOpsの世界では、監視設定を行う前にcurlを使って手動でエンドポイントが応答しているかどうか試す場面もあります。 失敗した時のエラーコードやレスポンスヘッダを見れば、問題の原因を絞り込む手がかりになりますね。

wgetとの違いやユニークな機能

curl とは よく似たツールに wget というものがあります。 どちらもWebページを取得できるので、混同しがちですよね。 大きな違いは、curlが多種多様なプロトコルに対応していたり、リクエストを柔軟にカスタマイズしやすい点にあります。 一方、wgetは主にファイルの取得に特化しており、再帰的にディレクトリごとサイトをダウンロードする機能が便利だと感じることもあるかもしれません。

curlのユニークな機能としては、リクエストボディやヘッダを細かく指定できるところに加え、SSL証明書の扱いが豊富に準備されている点が挙げられます。 また、オプションが膨大なので、すべてを覚える必要はないですが、開発や運用で使う頻度が高いものだけでも押さえると良いでしょう。

curlには細かいバージョンアップがあり、機能追加やセキュリティ修正が行われていることがあります。 こまめにアップデートすることで、新しいオプションや安全な通信が可能になるケースがありますよ。

ちょっとしたTipsとエラー対応の考え方

最後に、エラーやトラブルシュートに役立つTipsをいくつか紹介します。 実務でも小さな手間を省くために、こうしたテクニックを知っておくと便利ではないでしょうか。

リクエストとレスポンスを可視化する

-v オプションを使うと、送受信のデータを詳細に表示できます。

レスポンスをファイルに保存する

-o を使って任意のファイル名で出力可能です。

リダイレクト先をたどる

-L オプションで、302などのリダイレクトがあっても自動で最終URLへアクセスします。

タイムアウトの設定

--connect-timeout--max-time で、長時間待ち続けないように制御できます。

エラーが出たときは、オプションの設定ミスや通信先の問題がないかを落ち着いて確認するのが大切ですね。 サーバー側のログや認証情報が合っているかなど、確かめるポイントはいくつかあります。 こうした小さな知識を積み重ねていくと、トラブルが起きても冷静に対処できるでしょう。

--insecure オプションのように証明書検証を無視する設定は、テスト以外では推奨されません。 本番環境で使用する際にはセキュリティリスクを十分に考慮してください。

まとめ

ここまで、curl とは 何かという基本情報から、HTTPリクエストやファイル転送、認証といった実務での活用シーンを見てきました。 プログラミング初心者の皆さんにとっては、最初はコマンドライン操作に慣れることが第一歩になるかもしれません。 しかし、curlの操作を身につけておくと、WebサービスやAPIのテストを素早く行えるようになり、開発効率も高まるでしょう。

実際のプロジェクトでは、認証トークンやオプションを細かく設定しながら、APIのレスポンスを解析していく場面が多いです。 そうした時に、ブラウザを使わずに1行のコマンドで確認できるcurlは頼もしい存在だと感じるかもしれませんね。 ぜひ皆さんも、本記事をきっかけにcurlの基本やオプションを試してみてください。

Shell Scriptをマスターしよう

この記事で学んだShell Scriptの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。