Software

Latest comments

local-ssl-proxyを使ってhttpsでhttp://localhost:3000/へアクセスする方法

wakairo @wakairo
Last edited

背景

Webの機能には、httpsでアクセスしているときにしか利用できないものがあります。 例えば、navigator.clipboardを用いてクリップボードへ書き込む機能はhttpsでアクセスしているときにのみ利用可能です。 ローカル環境においてhttpで走っている開発中のアプリに対して、こういった機能をテストするために、httpsでアクセスしたい場合があります。

ローカルでhttpsアクセスをhttpアクセスへ振り向ける方法

以下のコマンドを実行すれば、httpで走っている( http://localhost:3000/ )アプリに、ブラウザからhttps( https://localhost:3001/ )からアクセスできるようになります。

npx local-ssl-proxy --source 3001 --target 3000

なお、アプリが走っているPCとは別のデバイスからアクセスする場合には、httpのポートのために行ったポートフォワーディングやファイアウォールの設定がhttpsのポートにも必要となります。

余談その1

Copilot先生によれば、httpで走っているアプリにhttps相当でアクセスするための別の方法としては、以下のものがあるそうです。

  • localtunnelなど、ローカルで走っているアプリをインターネットに公開するサービスを利用してしまう。
  • Chrome DevToolsのリモートデバッグ機能を利用する。

なお、Copilot先生の回答全文はこちらです。

余談その2

local-ssl-proxyは、Copilot先生に教えてもらいました。Google検索ではlocal-ssl-proxyにはたどり着いていませんでした。

0
Raw
https://www.techtips.page/en/comments/291
😄1
🔧1
❤️1

__init__.pyの解説記事

takuma_tech Takuma @takuma_tech
Last edited

__init__.pyとモジュール・パッケージ・名前空間の関係について、以下の記事が分かりやすかったです。単に「こう書けば動く」ではなく、概念が説明されていてありがたいです。

0
Raw
https://www.techtips.page/en/comments/290
🔧1
❤️1

パスワード入力でミスしたらC-uでたいていやり直せる

linux Linx使い @linux
Last edited

C-u、つまり、Ctrlキーを押しながらuキーを押す操作は、Bashやその背後にあるreadlineライブラリで、「カーソルから行頭までの切り取り」に割り当てられている。そのせいなのか、Unixシェルでパスワード入力中に失敗したときに、C-uを押してからパスワードを正しく再入力すれば、処理が通ることが多い、という小ネタです。

参考

unix-line-discard (C-u) ポイントから行頭までをキルします。 キルされたテキストはキルリング (kill-ring) に入ります。

https://ja.manpages.org/bash より

unix-line-discard (C-u) Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring.

https://manpages.org/readline/3 より

2
Raw
https://www.techtips.page/en/comments/289
😄1
🔄1
🔧1

w3c_validators gemでNu validatorのコンテナイメージを利用する場合

kenicode SatoKen @kenicode

Nu validatorのコンテナイメージであるghcr.io/validator/validator:latestをローカルで走らせて、 これをw3c_validatorsW3CValidators::NuValidatorから使う場合は、以下ようにuriを指定してnewすれば動きます。

validator = W3CValidators::NuValidator.new(:validator_uri => 'http://localhost:8888/')

ちなみに、ローカルで走らせたNu validatorに切り替えたところ実行時間がだいぶ減りましたので、w3c_validatorsが遅いと感じている方はローカル実行を試すと良いかもしれません。慣れればコンテナを走らせるのはサクッと出来ますよ。

2
Raw
https://www.techtips.page/en/comments/286
🔄1
🔧1

まつもとゆきひろ氏のHotwire評

ruby_on_rails Railsファン(非公式アカウント) @ruby_on_rails

Rubyの生みの親・まつもとゆきひろ氏が、ベロシティ(つまり開発速度)の向上や維持のために生まれた技術なのではないかとHotwireを評している記事です。

「Ruby on Rails」のバージョン7から、Hotwireという機能が入ったんですけれども、これも、たぶんベロシティをケアしているからこそ生まれたテクノロジーなんじゃないかなと思います。 (中略) 非常に興味深いことで、昔は、Railsアプリケーションは例えば、「15分でWebアプリケーションを作りました」みたいなデモをしていたわけなんですけれども、極端な話、現代的なシングルページアプリケーションを15分で作ることができるようになるという希望が、これによって与えられたということだと思います。

全文はこちらから。

0
Raw
https://www.techtips.page/en/comments/282
🙋1
❤️1

captureを使ってform_withのようにblockを活用したヘルパーメソッドを作る

wakairo @wakairo
Last edited

背景

Railsのactionviewのヘルパー関数には、form_withのように、blockを活用して入れ子のHTML要素を記述できる便利なヘルパーメソッドがあります。 具体的には、以下のような記述(Railsガイドより引用)が出来るヘルパーメソッドです。

<%= form_with url: "/search", method: :get do |form| %>
  <%= form.label :query, "Search for:" %>
  <%= form.text_field :query %>
  <%= form.submit "Search" %>
<% end %>

blockを用いてHTML要素の入れ子を出力できるこのようなヘルパーメソッドの自作に関する話です。

作り方

actionviewのcaptureというヘルパーメソッドを用いると、form_withのように、blockを使ってHTML要素の入れ子を記述できるヘルパーメソッドを自作できます。

ちなみに、このcaptureは、Railsガイドを読んでも、RailsのAPIドキュメントを読んでも、いまいち使い道が分かっていなかったのですが、このような自作ヘルパーで使うというのが1つの使い道のようです。

自作ヘルパーメソッドの実装例

def some_helper(content=nil, &block)
  object_passed_to_block = 'hello, capture'
  content = capture(object_passed_to_block, &block) if block
  tag.div(content, class: 'some-class')
end

自作ヘルパーメソッドの利用例

ERBから利用
<%= some_helper do |object| %>
  <p><%= object %></p>
<% end %>
出力結果
<div class="some-class">
  <p>hello, capture</p>
</div>
Rubyのコード内から利用
some_helper do |object|
  tag.p(object)
end
出力結果
<div class="some-class"><p>hello, capture</p></div>
Rubyのコード内からblockなしで利用
some_helper('123')
出力結果
<div class="some-class">123</div>
0
Raw
https://www.techtips.page/en/comments/281
🔧1
💡1

importmap-railsは、2.x系でiOS 16.3以前のサポートを打ち切りました。

wakairo @wakairo
Last edited

問題

importmap-railsはv2.0.0で、「ネイティブでImport mapsに対応していないブラウザでImport mapsを機能させるためのshims」の利用を打ち切りました。 一方で、iOS 16.3以前に搭載されているSafariブラウザは、ネイティブではImport mapsに対応していません。 したがって、importmap-railsを1.x系から2.x系にバージョンアップすると、iOS 16.3以前のデバイスではJavaScriptを利用したRailsアプリが動かなくなります。 このことは、この打ち切りのプルリクエスト #216で議論されているように、開発陣に既に認識されており、認識した上での打ち切りとなっています。

なお、特にiOS 15は、2024-01-22にセキュリティアップデートが出ているAppleがサポートをまだ続けているOSであるにもかかわらず、最新の15.8.1へアップデートしたデバイスであってもRailsアプリが動かなくなるため要注意です。

(参考)iOS 15とiOS 16の状況

以上から、iOS 15とiOS 16のデバイスは、2024年2月現在まだまだ利用されていると言えます。

回避策

importmap-railsを用いたRails 7アプリで、iOS 16.3以前をサポートするには、 以下のようにjavascript_importmap_tagsの前にes-module-shimsを入れます。 詳細は、GitHubの公式リポジトリのREADMEの該当部分(Supporting legacy browsers such as Safari on iOS 15)を参照してください。

<script async src="https://ga.jspm.io/npm:[email protected]/dist/es-module-shims.js" data-turbo-track="reload"></script>
<%= javascript_importmap_tags %>

参考情報

0
Raw
https://www.techtips.page/en/comments/277
😄1
🔄1
😿1
💯1

Windows上でPlaywrightを使ってWebKitブラウザを実行する方法

wakairo @wakairo

Windows PCでWebアプリなどを開発しているときに、iPhoneなどのAppleデバイスでの動作確認をしたいときがあります。 しかしながら、Appleデバイスの標準ブラウザであるSafariのWindows版は2012年頃にサポートが終了しています。 その一方で、SafariのHTMLレンダリングエンジンであるWebKitをWindows上で走らせることは現在でも可能です。

Playwrightを利用するとWebKitブラウザをWindowsにインストールして実行することが比較的簡単に出来ますので、 このコメントではその方法を以下に示します。

NodeJSのインストール

Windowsの公式パッケージマネージャであるwingetを利用すれば、以下のコマンドでNodeJSをインストール出来ます。

winget install -e --id OpenJS.NodeJS.LTS

Playwrightのインストール

まず、適当な作業フォルダを作成します。次にそのフォルダでコマンドプロンプトかPowerShellを開き、以下のコマンドを実行します。

npm init playwright@latest

このコマンドを実行すると出てくる「Install Playwright browsers」の質問項目でYesつまりtrueを選択します。 (ここでYesを選択できなかった場合には、このコマンドに続いてnpx playwright install webkitを実行して下さい。)

WebKitブラウザの起動

以下のフォルダを開き、Playwright.exeを実行すると、WebKitブラウザが起動します。

C:\Users\<ユーザ名>\AppData\Local\ms-playwright\webkit-<バージョン>
1
Raw
https://www.techtips.page/en/comments/276
😄1
🔄1
💡1