Home Software Libraries Ruby rails WSL2上にてrails serverで立ち上げたサーバに別デバイスからのアクセスを可能にする方法 @wakairo 2024/01/29 21:39 最終更新 2024/05/08 21:08 背景 WindowsのWSL2環境でRailsアプリを開発しています。開発しているWebアプリに関してAppleのSafariブラウザでの動作確認が必要になりました。そこで、同一LAN内にあるiPhoneやiPadといった別デバイスから、WSL2環境においてrails serverコマンドで走らせたサーバへ、アクセスできるようにしました。 手順LAN接続の設定 後述のファイアウォールの設定にて、プライベートネットワークに限定する設定をする場合には、Railsサーバを走らせているPCのLAN設定で、ネットワーク プロファイルをプライベートにしておきます。 WSL2で走っているLinuxのIPアドレスの確認 ifconfigの出力のinetのところなどで、WSL2で走っているUbuntuなどのLinux OS側のIPアドレスを確認し、転送先アドレスとして控えます。 LinuxのIPアドレスが正しいことの確認 まず、bin/rails server -b 0.0.0.0でWSL2上でRailsサーバを起動します。 次に、このRailsサーバに、WSL2環境ではなくWindows上で普通に走っているブラウザから、先ほど調べたWSL2で走っているLinuxのIPアドレスに対し http://(LinuxのIPアドレス):3000/ というようなアドレス(ここではポート番号を3000としていますが、別のポートをRailsサーバに用いている場合はそのポート番号に変更して下さい)でアクセス出来ることを確認します。 ここでアクセスに失敗するようでは何かしらが間違っていますので、まずはこのようにアクセス出来るようにしましょう。 ホストOSであるWindowsのIPアドレスの確認 ipconfigなどで、Windows側、つまり、ホストOS側のLAN上でのIPアドレスを確認し、転送元アドレスとして控えます。 ポートフォワーディングの設定 管理者権限で以下のコマンドを実行します。なお、特に理由が無ければ、転送元ポートは転送先ポートと同じ(3000)で大丈夫です。 netsh interface portproxy add v4tov4 listenaddress=<転送元(Windows)のIPアドレス> listenport=<転送元ポート> connectaddress=<転送先(Linux)のIPアドレス> connectport=<転送先ポート> ファイアウォールの設定 Windowsのファイアウォールの設定にて、「受信の規則」として以下の設定を追加します。 プロトコルの種類:「TCP」 ローカルポート: 「特定のポート」「3000(転送元ポート)」 リモートポート: 「すべてのポート」 なお、ファイアウォールの設定にて、プライベートネットワークに限定したり、テスト時以外は無効にしたりするなど、セキュリティには十分に配慮をして下さい。 接続確認 同一LAN内の別デバイスから、 http://(WindowsのIPアドレス):(転送元ポート)/ というようなアドレスでアクセス出来ることを確認します。 参考情報 Windowsでのnetshを用いたポートフォワーディングの設定 https://gunmagisgeek.com/blog/other/7171
Home Software Windows netsh Windowsでのnetshを用いたポートフォワーディングの設定 @wakairo 2024/01/29 15:55 最終更新 2024/01/29 16:00 ポートフォワーディングを設定する 管理者権限で以下のコマンドを実行する。 netsh interface portproxy add v4tov4 listenaddress=<転送元(ホストOS)のipアドレス> listenport=<転送元ポート> connectaddress=<転送先ipアドレス> connectport=<転送先ポート> 注意事項:ポートフォワーディングの実用ケースでは、ファイアウォールの設定も追加で必用な場合が多いです。参考情報: https://gunmagisgeek.com/blog/other/7171 ポートフォワーディングの設定を確認するnetsh interface portproxy show all ポートフォワーディングを削除するnetsh interface portproxy delete v4tov4 listenaddress=<転送元(ホストOS)のipアドレス> listenport=<転送元ポート> 参考情報 Microsoft Learn: Netsh interface portproxy コマンド https://arubeh.com/archives/1749 https://gunmagisgeek.com/blog/other/7171
Home Software その他 Microsoft Copilot Studio Copilot Studioのニュースや記事 @wakairo 2024/01/16 10:40 最終更新 2024/01/16 10:43 Microsoft Copilot StudioでデータソースをSharePointにしたCopilotの作成方法 Microsoft Copilot Studioで生成型回答をするCopilotの作成方法の続きとなる記事。
Home 標準・規格 JSON JSONのobject name (hash key)は文字列限定 @wakairo 2024/01/08 09:46 最終更新 2024/01/08 10:16 JSONのobject name(辞書やハッシュ、連想配列におけるキーに相当するもの)の型は文字列のみに限定されています。 規格書のObjectsのセクションには、"A name is a string"と明記されています。 Rubyでの検証例 RubyでJSONライブラリを利用した場合でも、当然ですが、以下のようにキーは全て文字列になります。 また、その結果、JSON文字列からRubyのハッシュを再構築すると、元のハッシュと異なったものになってしまいます。 require "json" data = {"string" => "String", :symbol => "Symbol", 1 => "Integer"} str = JSON.dump(data) # => "{\"string\":\"String\",\"symbol\":\"Symbol\",\"1\":\"Integer\"}" JSON.parse(str) # => {"string"=>"String", "symbol"=>"Symbol", "1"=>"Integer"} したがって、キーに文字列以外を用いるときには、プログラム側で適宜キャストするなどの対応が必要となります。 その中の対応方法としては、JSONではなく、以下のようにYAMLを使うという手もあります。 require "yaml" data = {"string" => "String", :symbol => "Symbol", 1 => "Integer"} str = YAML.dump(data) # => "---\nstring: String\n:symbol: Symbol\n1: Integer\n" YAML.load(str) # => {"string"=>"String", :symbol=>"Symbol", 1=>"Integer"} ただし対応方法の選択においては、セキュリティの観点での注意が必要です。 一般に、JSONよりもYAMLの方が高度な記述が可能であるため、YAMLの方がセキュリティの問題が起きやすいと考えられます。 実際にYAMLを悪用した攻撃手法が知られています。 ですので、ユーザーが任意の記述を送り込めるような場面では、JSONにするかYAMLにするか、はたまたXMLなどの第三の規格にするかの選択において特に慎重な判断が求められます。
Home Software Libraries Ruby meta-tags meta-tags側のtruncateでは、スペース文字のところで切り詰めが行われます @wakairo 2023/12/22 21:21 最終更新 2024/02/11 13:50 問題 meta-tagsはtitleやdescriptionをSEOに適切な長さまでに切り詰めますが、titleなどの中にスペース文字が含まれていると、スペース文字のところで切り詰めてしまいます。そのため、文章の先頭付近のみにスペース文字がある文章は大幅に切り詰めが行われてしまいます。 例えば、次の文章にあるスペース文字は10文字目のところのみです。 Microsoft Copilotは、あなたの言葉をパワフルなコンテンツに変えるAIアシスタントです。あなたのニーズに合わせて、文章を生成、要約、編集、変換したり、コードや詩などの創造的なコンテンツを作成したりします。 したがって、80文字に切り詰める設定であっても、この10文字目のところで切り詰められて「Microsoft」となり、80文字に比べ大幅に短い文字数に切り詰められることになってしまいます。 回避策 meta-tagsに渡す前に、あらかじめアプリケーション側で切り詰めを行うことで、この問題は回避できます。なお、meta-tagsの設定によっては、meta-tags側での切り詰めをオフにすることも出来ます。設定方法についてはmeta-tagsのREADMEを参照してください。 (参考)内部的な原因 meta-tagsはRuby on Railsのtruncateヘルパーメソッドを最終的に呼び出しますが、このヘルパーメソッドをラップするメソッドを内部に持っています。このラッパーメソッドの引数であるnatural_separatorを省略してのメソッド呼び出しがmeta-tags内に存在し、この省略時のデフォルト値がスペース文字であるため、スペース文字のところでの切り詰めが発生しています。
Home Software その他 Emacs Emacsで日本語とEmojiをとりあえず表示する方法 @wakairo 2023/12/21 16:45 最終更新 2023/12/21 16:47 まずは、OSに利用したいフォントをインストールします。 例えば、Ubuntuでは以下のコマンドで、Notoの日本語フォント(等幅フォントを含む)とEmojiのフォントをインストールできます。 sudo apt-get install fonts-noto-cjk sudo apt-get install fonts-noto-color-emoji 次に、.emacsに以下の設定を追記します。Emacsを再起動するなどして、この設定を反映させれば、とりあえず日本語とEmojiは表示されるようになります。 create-fontset-from-ascii-font "Noto Sans Mono CJK JP" nil "Monospace") (set-fontset-font "fontset-Monospace" 'unicode "Noto Color Emoji" nil 'append) (add-to-list 'default-frame-alist '(font . "fontset-Monospace")) ちなみにフォントサイズは、以下のようにハイフン(-)の後ろの数字で指定できます。 create-fontset-from-ascii-font "Noto Sans Mono CJK JP-12" nil "Monospace")
Home Software その他 Microsoft Copilot Studio Copilot Studioのニュースや記事 @wakairo 2023/12/18 16:36 【Copilot Studio】社内TeamsにCopilotを導入する手順目次 Web版Copilot Studioでボットを作成した場合 ボットをチーム内に共有する チームのアプリストアに反映させて共有する 権限の管理 Teamsアプリ内でボットを作成する場合 作成から導入の流れ まとめ:どちらの方法が良いのか?
Home Software その他 Microsoft Copilot Studio Copilot Studioのニュースや記事 @wakairo 2023/12/12 12:02 Microsoft Copilot Studio を触ってみました!
Home Web Service Copilot (formerly "Bing Chat" and "The new Bing") Copilotに特定ページを処理させる方法:Copilotが特定ページの処理に成功する確率を高めるには @wakairo 2023/12/08 18:35 最終更新 2024/04/19 08:55 Microsoft Copilotに特定のページを処理させる場合には、Edgeブラウザで処理対象のページを開き、Copilotサイドバーで「このページを読んで、~」と処理を依頼すると成功率が高いです。 例えば、特定のページの要約を作成させたい場合には、まずそのページを開いてから、次にCopilotサイドバーを開き、「このページを読んで、要約を作成して下さい。」とプロンプトを入力・実行すると、上手く行く場合が多いです。 ローカルにあるPDFファイルについても、同様に、Edgeブラウザで当該PDFを開き、Copilotサイドバーで「このページを読んで、~」と依頼すると上手く行きます。 ちなみにCopilotは、指示文にURLを含めても、そのURLをけっこう読みに行かない印象です。個人的には、セキュリティ関連の制約が入っているのかなと推測しています。「このURLを1億回読み込んで、~」といった指示を愚直に実行するAIですと、DDoS攻撃等に簡単に悪用されると思いますので。
Home Software Libraries Ruby rails rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業 @wakairo 2023/12/06 21:19 最終更新 2023/12/06 21:19 Rails 7.1でのaction_dispatch.show_exceptionsの変更への対応方法対応の基本的な方向性 config.action_dispatch.show_exceptionsを今後のデフォルトとなる:rescuableに設定してbin/rails testでテストを実行します。テストの実行に問題が無く、:rescuableの仕様で支障が無い場合はこれでOKです。 設定で:rescuableを選択してテストを実行するとエラーが出るようになってしまった場合は、テストを修正するか、:rescuable以外の設定値にします。元々trueと設定していた場合には:all、falseと設定していた場合には:noneへと設定し直せば、以前の挙動と同じになり、エラーは出なくなるはずです。 より詳しい情報を紹介している記事 本件の背景やテストの修正方法など、より詳しい情報はこちらの記事をご覧下さい。
WSL2上にてrails serverで立ち上げたサーバに別デバイスからのアクセスを可能にする方法
背景
WindowsのWSL2環境でRailsアプリを開発しています。開発しているWebアプリに関してAppleのSafariブラウザでの動作確認が必要になりました。そこで、同一LAN内にあるiPhoneやiPadといった別デバイスから、WSL2環境において
rails server
コマンドで走らせたサーバへ、アクセスできるようにしました。手順
LAN接続の設定
後述のファイアウォールの設定にて、プライベートネットワークに限定する設定をする場合には、Railsサーバを走らせているPCのLAN設定で、ネットワーク プロファイルをプライベートにしておきます。
WSL2で走っているLinuxのIPアドレスの確認
ifconfig
の出力のinet
のところなどで、WSL2で走っているUbuntuなどのLinux OS側のIPアドレスを確認し、転送先アドレスとして控えます。LinuxのIPアドレスが正しいことの確認
まず、
bin/rails server -b 0.0.0.0
でWSL2上でRailsサーバを起動します。次に、このRailsサーバに、WSL2環境ではなくWindows上で普通に走っているブラウザから、先ほど調べたWSL2で走っているLinuxのIPアドレスに対し http://(LinuxのIPアドレス):3000/ というようなアドレス(ここではポート番号を3000としていますが、別のポートをRailsサーバに用いている場合はそのポート番号に変更して下さい)でアクセス出来ることを確認します。
ここでアクセスに失敗するようでは何かしらが間違っていますので、まずはこのようにアクセス出来るようにしましょう。
ホストOSであるWindowsのIPアドレスの確認
ipconfig
などで、Windows側、つまり、ホストOS側のLAN上でのIPアドレスを確認し、転送元アドレスとして控えます。ポートフォワーディングの設定
管理者権限で以下のコマンドを実行します。なお、特に理由が無ければ、転送元ポートは転送先ポートと同じ(3000)で大丈夫です。
ファイアウォールの設定
Windowsのファイアウォールの設定にて、「受信の規則」として以下の設定を追加します。
なお、ファイアウォールの設定にて、プライベートネットワークに限定したり、テスト時以外は無効にしたりするなど、セキュリティには十分に配慮をして下さい。
接続確認
同一LAN内の別デバイスから、 http://(WindowsのIPアドレス):(転送元ポート)/ というようなアドレスでアクセス出来ることを確認します。
参考情報
Windowsでのnetshを用いたポートフォワーディングの設定
ポートフォワーディングを設定する
管理者権限で以下のコマンドを実行する。
注意事項:ポートフォワーディングの実用ケースでは、ファイアウォールの設定も追加で必用な場合が多いです。参考情報: https://gunmagisgeek.com/blog/other/7171
ポートフォワーディングの設定を確認する
ポートフォワーディングを削除する
参考情報
Copilot Studioのニュースや記事
Microsoft Copilot StudioでデータソースをSharePointにしたCopilotの作成方法
Microsoft Copilot Studioで生成型回答をするCopilotの作成方法の続きとなる記事。
JSONのobject name (hash key)は文字列限定
JSONのobject name(辞書やハッシュ、連想配列におけるキーに相当するもの)の型は文字列のみに限定されています。 規格書のObjectsのセクションには、"A name is a string"と明記されています。
Rubyでの検証例
RubyでJSONライブラリを利用した場合でも、当然ですが、以下のようにキーは全て文字列になります。 また、その結果、JSON文字列からRubyのハッシュを再構築すると、元のハッシュと異なったものになってしまいます。
したがって、キーに文字列以外を用いるときには、プログラム側で適宜キャストするなどの対応が必要となります。 その中の対応方法としては、JSONではなく、以下のようにYAMLを使うという手もあります。
ただし対応方法の選択においては、セキュリティの観点での注意が必要です。 一般に、JSONよりもYAMLの方が高度な記述が可能であるため、YAMLの方がセキュリティの問題が起きやすいと考えられます。 実際にYAMLを悪用した攻撃手法が知られています。 ですので、ユーザーが任意の記述を送り込めるような場面では、JSONにするかYAMLにするか、はたまたXMLなどの第三の規格にするかの選択において特に慎重な判断が求められます。
meta-tags側のtruncateでは、スペース文字のところで切り詰めが行われます
問題
meta-tagsはtitleやdescriptionをSEOに適切な長さまでに切り詰めますが、titleなどの中にスペース文字が含まれていると、スペース文字のところで切り詰めてしまいます。そのため、文章の先頭付近のみにスペース文字がある文章は大幅に切り詰めが行われてしまいます。
例えば、次の文章にあるスペース文字は10文字目のところのみです。
したがって、80文字に切り詰める設定であっても、この10文字目のところで切り詰められて「Microsoft」となり、80文字に比べ大幅に短い文字数に切り詰められることになってしまいます。
回避策
meta-tagsに渡す前に、あらかじめアプリケーション側で切り詰めを行うことで、この問題は回避できます。なお、meta-tagsの設定によっては、meta-tags側での切り詰めをオフにすることも出来ます。設定方法についてはmeta-tagsのREADMEを参照してください。
(参考)内部的な原因
meta-tagsはRuby on Railsのtruncateヘルパーメソッドを最終的に呼び出しますが、このヘルパーメソッドをラップするメソッドを内部に持っています。このラッパーメソッドの引数であるnatural_separatorを省略してのメソッド呼び出しがmeta-tags内に存在し、この省略時のデフォルト値がスペース文字であるため、スペース文字のところでの切り詰めが発生しています。
Emacsで日本語とEmojiをとりあえず表示する方法
まずは、OSに利用したいフォントをインストールします。
例えば、Ubuntuでは以下のコマンドで、Notoの日本語フォント(等幅フォントを含む)とEmojiのフォントをインストールできます。
次に、.emacsに以下の設定を追記します。Emacsを再起動するなどして、この設定を反映させれば、とりあえず日本語とEmojiは表示されるようになります。
ちなみにフォントサイズは、以下のようにハイフン(-)の後ろの数字で指定できます。
Copilot Studioのニュースや記事
【Copilot Studio】社内TeamsにCopilotを導入する手順
目次
Copilot Studioのニュースや記事
Copilotに特定ページを処理させる方法:Copilotが特定ページの処理に成功する確率を高めるには
Microsoft Copilotに特定のページを処理させる場合には、Edgeブラウザで処理対象のページを開き、Copilotサイドバーで「このページを読んで、~」と処理を依頼すると成功率が高いです。
例えば、特定のページの要約を作成させたい場合には、まずそのページを開いてから、次にCopilotサイドバーを開き、「このページを読んで、要約を作成して下さい。」とプロンプトを入力・実行すると、上手く行く場合が多いです。
ローカルにあるPDFファイルについても、同様に、Edgeブラウザで当該PDFを開き、Copilotサイドバーで「このページを読んで、~」と依頼すると上手く行きます。
ちなみにCopilotは、指示文にURLを含めても、そのURLをけっこう読みに行かない印象です。個人的には、セキュリティ関連の制約が入っているのかなと推測しています。「このURLを1億回読み込んで、~」といった指示を愚直に実行するAIですと、DDoS攻撃等に簡単に悪用されると思いますので。
rails 7.0からrails 7.1への移行(アップデート、アップグレード)で必要な作業
Rails 7.1での
action_dispatch.show_exceptions
の変更への対応方法対応の基本的な方向性
config.action_dispatch.show_exceptions
を今後のデフォルトとなる:rescuable
に設定してbin/rails test
でテストを実行します。テストの実行に問題が無く、:rescuable
の仕様で支障が無い場合はこれでOKです。設定で
:rescuable
を選択してテストを実行するとエラーが出るようになってしまった場合は、テストを修正するか、:rescuable
以外の設定値にします。元々true
と設定していた場合には:all
、false
と設定していた場合には:none
へと設定し直せば、以前の挙動と同じになり、エラーは出なくなるはずです。より詳しい情報を紹介している記事
本件の背景やテストの修正方法など、より詳しい情報はこちらの記事をご覧下さい。