Linux

さっとファイルを共有したい時に便利なコマンド1つでHTTPサーバを起動する方法

はじめに

パソコン同士やパソコンとスマートフォンでファイルを共有したい時に、コマンド1つでさっとHTTPサーバを起動できるとたまに便利です。いわゆるワンライナーでのHTTPサーバです。この記事で説明する方法では環境としてNode.js、Ruby、Pythonのいずれかが必要となりますが、これらの各言語でHTTPサーバを起動する方法をまとめます。

できるようになること

HTTPサーバを起動して、パソコンのOSによらず、またスマートフォンのiOSやAndroidでもブラウザを起動して以下のようにHTTPサーバにアクセスできるようになります。HTTPサーバで公開したディレクトリ内のファイルが表示されます。

後は必要なファイルをダウンロードしたり閲覧したりできます。今回iPhoneからLinuxマシン上のファイルをダウンロードしたい機会があったのでまとめてみました。

前提と環境

以下が前提となります。この記事ではRuby、Python、Node.jsそれぞれについてHTTPサーバを起動する方法を説明しますが、PHPやRustなどの言語でもHTTPサーバが起動できると思います。

  • HTTPサーバを起動させるOS : Ubuntu18.04 (WindowsやmacOSでもOK)
  • Ruby、Python(3以上)、Node.jsのいずれかがインストールされていることが前提
  • HTTPサーバを起動するパソコンとHTTPサーバにアクセスするパソコン(もしくはスマートフォンなど)は同じLAN内にいる前提

なお、HTTPサーバを起動すると指定したディレクトリ配下にあるファイルは全て公開状態となります。なので常に公開状態にしておいたり公衆WiFiなどでHTTPサーバを起動しないよう注意してください。あくまでもさっと一時的にファイル共有することを想定してまとめています。

RubyでHTTPサーバを起動する

公開するための適当なディレクトリを作成し、そこに移動します。例えばここではホームディレクトリ配下にruby-serverというディレクトリを公開用に作成して移動します。

~/$ mkdir ruby-server
$ cd ruby-server

そこでRubyが使えることを確認します。

~/ruby-server$ ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]

もしrbenvでRubyをインストールしたことがあり、他のディレクトリでRubyを使っている場合は、以下のコマンドですでにインストール済のRubyのバージョンを確認し、

~/ruby-server$ rbenv versions
  2.6.2

以下で確認したバージョンのRubyを使えるようにできます。

~/ruby-server$ rbenv local 2.6.2

あとは以下でHTTPサーバを起動します。

~/ruby-server$ ruby -run -ehttpd . -p8000

-p8000でHTTPサーバが受け付けるポート番号を8000に指定しています。各自のファイアウォール環境に合わせて変更してください。

上記では、上記コマンド実行時のディレクトリ、すなわち~/ruby-server配下のファイルを公開状態にしています。
もしHTTPサーバで公開したいパスを変更したい場合は、以下のように公開したいパスをそのまま与えます。

~/ruby-server$ ruby -run -ehttpd ~/yourpath -p8000

あとはOSに関わらずパソコンでもスマートフォンでもHTTPサーバを起動しているパソコンのIPアドレスにブラウザからアクセスすれば公開しているディレクトリにアクセスできます。
もしLinuxでHTTPサーバを起動している場合は、以下のコマンドでIPアドレスを確認できます。

$ ifconfig

以降では、Python、Node.jsそれぞれでHTTPサーバを起動する手順を載せます。

PythonでHTTPサーバを起動する

Rubyの場合と同様に適当なディレクトリを作成して移動します。

~/$ mkdir python-server
$ cd python-server

Pythonが使える環境であることを確認します。

~/python-server$ python -V
Python 3.7.1

後は以下でHTTPサーバを起動できます。以下でpython-server配下が公開状態になります。

~/python-server$ python -m http.server 8000

公開するパスを指定したい場合は-dオプションを使って指定します。

~/python-server$ python -m http.server 8000 -d ~/yourpath

Node.jsでHTTPサーバを起動する

適当なディレクトリを作成して移動します。

~/$ mkdir nodejs-server
$ cd nodejs-server

Node.jsが使える環境であることを確認します。

~/nodejs-server$ node -v
v10.16.0

Node.jsの場合は以下でHTTPサーバ用のパッケージをインストールする必要があります。

~/nodejs-server$ npm install -g http-server

もしグローバルにインストールしたくない場合は、以下のようにローカルにのみ(ここではnodejs-server内のみ)にインストールしてもOKです。

~/nodejs-server$ npm install --save http-server

ローカルにHTTPサーバをインストールした場合は、node_modulesというディレクトリとpackage-lock.jsonというファイルがnodejs-server下に作成されます。

グローバルにhttp-serverをインストールした場合

以下でHTTPサーバを起動できます。以下でnodejs-server配下が公開状態になります。

~/nodejs-server$ http-server -p 8000

公開するパスを指定したい場合はパスを引数としてそのまま与えます。

~/nodejs-server$ http-server ~/yourpath -p 8000

ローカルにhttp-serverをインストールした場合

ローカルの場合は以下のようにローカルにあるhttp-serverコマンドを使ってHTTPサーバを起動します。

~/nodejs-server$ ./node_modules/http-server/bin/http-server -p 8000

後は同じで公開するパスを引数としてそのまま与えます。

~/nodejs-server$ /node_modules/http-server/bin/http-server ~/yourpath -p 8000

まとめ

コマンド1つでHTTPサーバを起動する方法をまとめました。ここで紹介したRuby、Python、Node.js以外にもおそらくほとんどの言語でHTTPサーバを起動できると思います。知っているともしかしたら役に立つかもしれません。

SPONSORED LINK

コメントを残す

メールアドレスが公開されることはありません。