2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WEBRickでWebサーバを立ち上げて同一LAN内のパソコンからアクセスする

Posted at

動機

フレームワーク無しでもWEBRickで簡単にWebサーバが作れるというのを読んで、面白そうだったので手元で試してみます。以下、忘れないようにするための記録です。

WEBRickでWebサーバーを立ち上げる(まずはローカル専用)

WEBRickについて詳しいことはこちらを見つつ。

↑これを見ると、

WEBrick は Ruby 3.0 で標準ライブラリから削除されました。Ruby 3.0 以降で WEBrick を使いたい場合は rubygems から利用してください。

とのことなので、gem installしておきます。

$ gem install webrick

次に、適当なディレクトリを作ってファイルを作成します。

server.rb
require 'webrick'
options = { BindAddress: '127.0.0.1', Port: '10080', DocumentRoot: '.' }
server = WEBRick::HTTPServer.new(options)
trap(:INT) { server.shutdown } # Signal.trap(:INT) { server.shutdown } でも同じ
server.start

Webサーバオブジェクト(つまりWEBRick::HTTPServerのインスタンス)はstartメソッドを持ち、これが最終的にWebサーバを起動させます。
Webサーバオブジェクトは、WEBRick::HTTPServer.new(options)で作成しています。
optionsとしてはとりあえずBindAddress, Port, DocumentRootの3項目を渡せば動くそうです。他の項目についてはるりまにまとまっていました。
BindAddress127.0.0.1を渡せばローカル専用のWebサーバになり、0.0.0.0を渡せばLAN内に公開されたWebサーバになります。
trap(:INT)の行で、ctrl+cが入力された時の動作を指定しています。ここではserver.shutdownでサーバーを止めています。(この行を書いていないとctrl+cで止められません。ps aux | grep webrickでプロセスidを調べてkillするとか)

あとはこのファイルを実行すればWebサーバが立ち上がります。

$ ruby server.rb
#[2021-10-31 18:09:13] INFO  WEBrick 1.7.0
#[2021-10-31 18:09:13] INFO  ruby 3.0.2 (2021-07-07) [x86_64-darwin20]
#[2021-10-31 18:09:13] INFO  WEBrick::HTTPServer#start: pid=23294 port=10080

curlでアクセスしてみます。

$ curl http://127.0.0.1:10080
# (以下結果)                                                   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
  <HEAD>
    <TITLE>Index of /</TITLE>
    <style type="text/css">
    <!--
    .name, .mtime { text-align: left; }
    .size { text-align: right; }
    td { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
    table { border-collapse: collapse; }
    tr th { border-bottom: 2px groove; }
    //-->
    </style>
  </HEAD>
  <BODY>
    <H1>Index of /</H1>
<TABLE width="100%"><THEAD><TR>
<TH class="name"><A HREF="?N=D">Name</A></TH><TH class="mtime"><A HREF="?M=D">Last modified</A></TH><TH class="size"><A HREF="?S=D">Size</A></TH>
</TR></THEAD>
<TBODY>
<TR><TD class="name"><A HREF="..">Parent Directory</A></TD><TD class="mtime">2021/10/31 18:19</TD><TD class="size">-</TD></TR>
<TR><TD class="name"><A HREF="webrick227.rb">webrick227.rb</A></TD><TD class="mtime">2021/10/31 18:19</TD><TD class="size">375</TD></TR>
</TBODY></TABLE><HR>    <ADDRESS>
     WEBrick/1.7.0 (Ruby/3.0.2/2021-07-07)<BR>
     at 127.0.0.1:10080
    </ADDRESS>
  </BODY>
</HTML>

Indexページのhtmlが返ってきました!
curlで指定したのと同じurlをブラウザで開くと...あれ?
スクリーンショット 2021-10-31 18.23.24.png

10080番ポートはブラウザで見られない

ERR_UNSAFE_PORTと書いてあります。調べるとどうやら、ブラウザが最近10080番ポートのサイトを見られないようにしているようです。

素直に10080番を避けて、optionsPortに指定するのを20080とかにしてみます。

server.rb
# 省略
options = { BindAddress: '127.0.0.1', Port: '20080', DocumentRoot: '.' }
# 省略

urlは http://127.0.0.1:20080 になります。
するとこんな画面になりました。

スクリーンショット 2021-10-31 22.09.59.png
optionsDocumentRootで指定したディレクトリにindex.htmlというファイルがなければ、この画面になります。(ホームページにアクセスすると「index of/」と表示され、ファイルが一覧で表示されてしまう)
今回はDocumentRootにはカレントディレクトリ('.')を指定しているので、server.rbと同じ階層にindex.htmlを作成して中身を適当に用意してみます。

index.html
<h1>Hello World!</h1>

ブラウザでさっきと同じurl( http://127.0.0.1:20080 )にアクセスすると...
スクリーンショット 2021-10-31 22.32.58.png
先ほどのIndex of /という画面ではなく、index.htmlの中身が表示されるようになりました!

WebサーバをLAN内に公開する

上で書いたように、optionsBindAddress127.0.0.1を渡せばローカル専用のWebサーバになり、0.0.0.0を渡せばLAN内に公開されたWebサーバになります。
(カフェなどの公共のLANに繋いでる時は危険なので試さないほうがいいと思います)

server.rb
# 省略
options = { BindAddress: '0.0.0.0', Port: '20080', DocumentRoot: '.' }
server = WEBRick::HTTPServer.new(options)
# 省略

もう一度サーバを立ち上げ直します。

$ ruby server.rb

これで、同一LAN内の他のパソコンやスマホからでもアクセスできるようになっているはずです。
アクセスするには127.0.0.1の代わりに、プライベートIPアドレスを使います。もちろんポート番号(ここでは20080)も引き続き付ける必要があります。
urlは例えばhttp://192.168.1.21:20080のようになるはずです。

これで、同じWi-Fiに繋いだ他の端末のブラウザにこのurlを打ち込むと、index.htmlの内容が見られました。
遊びでいろいろ使えそうな感じです。

繰り返しになりますが、公共のLANに繋いでる時は試さないほうがいいと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?