ローカルのサーバーをhttpsにしないと困るケースが増えてきていると思います。
- LINEログインなど外部の連携サービスがhttpsを強制するケース
- iOSがATSによりhttpsを強制するケース
- ブラウザでカメラを使うケース
自分で証明書を作る方法もあるでしょうが、大抵面倒です。Railsアプリケーションの場合は、puma-devを使うことで簡単に実現できます。
そもそもpuma-devとは
rack/railsのアプリを簡単に立ち上げたり、アイドルになったら止めたり、localhost:3000
等ではなく.dev
ドメインでアクセスできるようにするツールです。
同様のツールにpowというものもありますが、ActionCableとの相性やhttpsのサポートなどを考えると最近アクティブなpuma-devのほうがより良いと思います。
puma/puma-dev: A tool to manage rack apps in development with puma
個人的にはdevドメインでアクセスできるようになるのと、httpsが使えるのが便利で使っています。
(※puma-devはLinuxでも使えるようですが、僕がmacOSでしか試していないのでLinuxではこの記事と異なるかもしれません)
.devドメイン
例えばrails new railsapp
のような感じでアプリケーションを作ってpuma-dev用の設定をすれば、http://railsapp.dev というURLでローカルのサーバーにアクセスできるようになります。rails s
はしません。
通常のrails s
だと複数のアプリケーションを立ち上げるときにポートを変えて立ち上げなければならず(rails s -p 3001
など)、アクセスするときもlocalhost:3001等になってしまい、覚えておくのが大変です。
URLがプロジェクト名に対応しているとわかりやすくなります。http://facebook.dev/
とかhttp://twitter.dev/
だったとしたら良いですよね。
LANからアクセス
powと同じようにxip.io
ドメインがサポートされています。LAN内の別の端末からhttp://railsapp.192.168.1.1.xip.io
のようにIPを含めたURLでもアクセスできるようになります。
実機スマートフォンからの確認等に便利です。
本題のhttps対応
実はpuma-devを使うということ以外何も要りません。URLをhttpsにするだけです。
puma-devを使えば特に何もしなくてもローカルの開発サーバーがhttps対応になります。先ほどの例で言えばhttps://railsapp.dev
という感じです。
面倒だったhttps対応がpuma-devで簡単に実現できました。
(追記)
Macでも一手間かけないとhttps接続に警告がでることを指摘してもらいました。 @jnchito Thanks!
まず、証明書をMacにインストールします。ファイルは↓にあるcert.pem
です。
~/Library/Application Support/io.puma.dev/cert.pem
次に、その証明書を「常に信頼」にしておきます。
これでMacでのhttps対応はOKとなります。
追記2
僕のうろ覚えもあって、https対応のところは証明書を信頼するだけじゃないかもしれません、スイマセン。ブラウザ側で許可する必要があるという話もあるし、他にも必要なステップがあるかもしれません。そしたら適宜コメントで補足してくれるとありがたいです。
@jnchito さんが色々試してくれたので↑でうまくいかない人はコメントを参考にしてください。
(余談)iOS端末からhttpsでアクセスする
xip.io
ドメインを使ってiPhone実機からアクセスできることは先程書きました。当然これをhttpsにできるわけですが、その際証明書の警告が出ます。オレオレ証明書を使うときと同様です。
この場合、puma-devと一緒にインストールされた証明書ファイルをiOSデバイスにインストールしてあげることで警告無くアクセスできるようになります。
~/Library/Application Support/io.puma.dev/cert.pem
AirDrop経由などで送ると良いです。