Closed omochi closed 4 months ago
@kateinoigakukun --listen
オプションを実装しました。
ArgumentParser/ParsableArguments.swift:271: Fatal error: Validation failed for `CartonFrontendTestCommand`:
- Multiple (2) `Option` or `Flag` arguments are named "-l".
@kateinoigakukun ショートオプションの -l
が test
コマンドの list
と被っていたので削除しました。
dev
コマンドと test
コマンドで使い方が違うのは混乱を招くので、どちらも削除しました。
しかし、 --host
オプションよりも --listen
オプションの方が基本的なものになるので、
--host
は -h
で指定できるのに --listen
にはショートオプションがないのは不自然です。
-l
は使えないので、代わりに bind
の -b
を設定するのはどうでしょうか?
bind
はソケットをアドレスに割り当てるAPIの名前で、 NIO
もそれを踏襲しています。
--bind / -b
sounds reasonable to me :+1:
ロングオプションも合わせて bind
に変更するということですね。後で対応します。
Thanks!
現状
dev server は
--host
で指定したアドレスで待ち受けします。課題
指定しない場合
仮に
--host
がデフォルトの 127.0.0.1 の場合、 同一ホスト上からhttp://127.0.0.1:8080
へのアクセスでなければ接続できません。ホストのLAN IPが 192.168.1.2 だったとして、
http://192.168.1.2:8080
では接続できません。 また、同一LAN の他のマシンやスマートフォンからも接続できません。 ウェブアプリ開発ではスマホを対象にしたりするのでこれは不便です。指定する場合
--host
で 192.168.1.2 を指定すれば、それで接続できますが、 この場合は同一ホストであっても127.0.0.1
から接続できません。状況に応じて使い分ける必要があり、面倒です。
また、Docker内部で起動する場合、 コンテナのネットワークアドレスが必要ですが、 これを把握するのは多少面倒です。
提案
こういった状況のために、ソケットインターフェースには待ち受けアドレスとして
0.0.0.0
が指定できます。 これはそのホストのあらゆるアドレスからの接続を受け入れる特別な設定です。 これで起動すれば、接続元に応じたホストのアドレスを指定するだけで良いので簡単です。知る限りでは、
npx serve
コマンドやnc
コマンド、 vitejs の devサーバ なども、 デフォルトではこのモードで待ち受けおり、一般的です。そこで、新たに
--bind
オプションを導入し、待ち受けアドレスを指定できるようにしつつ、 そのデフォルト値として0.0.0.0
を指定します。--host
オプションのデフォルト値は127.0.0.1
を使うのをやめて、--bind
オプションの値を使うようにします。ただし、
0.0.0.0
は接続先アドレスとして不正です。 例えばSafariではこれはエラーとなり接続できません。そこで、
--bind
オプションが0.0.0.0
の場合は、--host
オプションの値は127.0.0.1
にします。 この書き換えは、Chromeのアドレスバーに0.0.0.0
を指定した時と同じ挙動です。--host
の用途--host
を指定する機能はこれまで通り必要です。 立ち上がったサーバに接続するためのURLを構築するために使われているからです。セキュリティ
待ち受けアドレスを限定するのはセキュリティを高める効果があります。 意図しない外部からの接続を遮断できるからです。 例えば postgresql などは初期状態でそのように設定されています。 この変更はそれを低下させます。
しかし、 dev server はデーモンとして常駐させるような使い方よりも、 明示的に CLI から起動し、フロントエンドジョブとしてユーザが運用するものなので、 影響は小さいです。