ここから本文です

今日のワンポイントITワード:curl(ファイル転送ツール/ライブラリ)

@IT 8月9日(火)6時10分配信

●curlとは

 curlはURL構文を用いてデータを転送するためのオープンソースなコマンドラインツール/ライブラリ。プロジェクト名は「cURL」(Client for URLs)であり、コマンドラインツール「curl」、ライブラリの「libcurl」がその成果物となる。

 libcurlはHTTP/HTTPSをはじめとする多くのプロトコル、各種の認証方式をサポートし、ファイル転送の中断と再開などの機能を持つライブラリだ。そして、curlはlibcurlの機能を利用して、コマンドラインやスクリプトからデータの転送を行うためのコマンドラインツールである。libcurl/curlは移植性が高く、さまざまなOSプラットフォームで動作する。curlは公式サイトのダウンロードページから入手できる(OSによっては標準でインストールされているかもしれない)。

●curlの基本的な使い方

 コマンドラインツールとしてのcurlの最も簡単な使い方は「curl 取得したいデータのURL」を実行する。以下に例を示す。

> curl http://www.atmarkit.co.jp/ait/subtop/dotnet/

○curlコマンドの実行例

 上記のコマンドを実行すると、コンソールに取得したデータ(この場合は、本フォーラムのトップページのHTML)が(HTMLテキストベースで)表示される。

 ファイルをカレントディレクトリに保存するには-oオプションまたは-Oオプションを使用する。

・-oオプション: ダウンロードするファイル名を指定する
・-Oオプション: 指定したURLのファイル名部分をファイル名として利用する

 以下に例を示す。

# -oオプションの使用例
> curl http://www.atmarkit.co.jp/ait/articles/1608/05/news045.html -o vs15preview3.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 68963 0 68963 0 0 308k 0 --:--:-- --:--:-- --:--:-- 308k

# -Oオプションの使用例
> curl http://www.atmarkit.co.jp/ait/articles/1608/05/news045.html -O
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 68963 0 68963 0 0 307k 0 --:--:-- --:--:-- --:--:-- 307k

 -oオプションでは指定するファイル名にディレクトリパスを含めてもよい。ただし、このときには--create-dirsオプションを同時に指定する必要がある。以下に例を示す。

> curl http://www.atmarkit.co.jp/ait/articles/1608/05/news045.html -o test\vs15preview3.html --create-dirs

 これに対して、-Oオプションでは(ファイル名は自動的に決定されることから)ファイルは常にカレントディレクトリに保存される。

 URLには「{}」や「[]」を使って、複数のファイルも指定できる。以下に例を示す。

> curl http://localhost:9080/hoge[1-3].txt -o huga#1.txt

 見れば分かる通り、これはhoge1.txt~hoge3.txtの3つのテキストファイルをダウンロードするものだ。ここでは保存先にファイル名として「huga#1.txt」を指定している。この「#1」は上記の「[1-3]」に呼応するもので、保存時に自動的に「1」~「3」が「huga」に付加されるようになる。なお、curlコマンドでは複数のURLを指定可能だが、ダウンロード自体はシーケンシャルに行われる(ただし、libcurlライブラリは複数のファイルの同時ダウンロードをサポートしている)。

●他のコマンドと組み合わせる

 curlで取得できるのはHTMLページだけではない。例えば、Webサーバ上に以下のようなPythonファイル(hello.pyファイル)があったとする。

#!/usr/bin/env pythonprint('hello from python script')

 このファイルを取得して、実行するコマンドラインは次のようになる。

> curl -s http://localhost:9080/hello.py | python -hello from python script


 このようにすると、curlコマンドは取得したデータを標準出力に送る。pythonコマンドの直後にある「-」は標準入力の内容を受け付けて、それを実行することを意味している。また、UNIX系統のOSであれば、以下のようなことも可能だ(ここではシェルにbashを使用)。また、ここで指定している-sオプションは「silent」モードを意味し、-oオプション指定時に表示されたプログレスバー(やエラーメッセージ)を表示しないようになる。

$ python -c "$(curl -s http://localhost:9080/hello.py)"hello from python script

 詳細は割愛するが、文字列中の「$()」はコマンド置換を行うbashの機能だ(ここで行っているようなシンプルなものであれば、バッククオートで囲んでもよい)。この場合はcurlコマンドで取得したファイルの内容がpythonコマンドによって実行される。何らかの情報を求めてWebをさまよっていると、curlと他のコマンドを組み合わせた上記のようなコマンドラインを目にすることがたまにあるので、覚えておくとよいだろう。

●Wgetとcurl

 curlと同様なコマンドラインベースのファイル転送ツールとしては、GNU Wgetもあるが、curlの公式サイトのFAQページによれば、「curlはWgetのクローンではない。…… 中略 …… 開発時にはcurlがWgetの代わりになるとか、競合になるといった意識はなかった。curlは単発のファイル転送を目的としている」(要約)とある。

 Wgetのようにリンクをたどって再帰的にファイルのダウンロードを行うような機能はcurlにはないが、その一方でサポートしているプロトコルはcurlの方が多いなど、機能面で両者には違いがあることに注意しよう。

 curlはURL構文を用いてデータを転送するためのオープンソースなコマンドラインツール/ライブラリで、主にコマンドラインからWebからデータを取得するために使われる。1行でデータ(ファイル)を取得できる手軽さから、スクリプト言語と組み合わせて、ワンライナーでツールなどをインストールするためにもよく使われている。Windowsユーザーにはあまりなじみがないかもしれないが、手軽で便利なツールだ。

[かわさきしんじ,Insider.NET編集部]

最終更新:8月9日(火)6時10分

@IT

TEDカンファレンスのプレゼンテーション動画

暗闇で光るサメと驚くほど美しい海洋生物たち
波のほんの数メートル下で、海洋生物学者であり、ナショナルジオグラフィックのエクスプローラーかつ写真家のデビッド・グルーバーは、素晴らしいものを発見しました。海の薄暗い青い光の中で様々な色の蛍光を発する驚くべき新しい海洋生物たちです。彼と一緒に生体蛍光のサメ、タツノオトシゴ、ウミガメ、その他の海洋生物を探し求める旅に出て、この光る生物たちがどのように私たちの脳への新たな理解を明らかにしたのかを探りましょう。[new]