BETA

【Ruby】URI.joinの挙動に躓く

投稿日:2020-08-24
最終更新:2020-08-24

こんにちは、しきゆらです。
今回は、タイトル通りURI.joinの挙動で詰まったのでメモしておきます。

URI.joinとは

join(uri_str, *path) -> object
文字列 uri_str と path ... を URI として連結して得られる URI オブジェクトを返します
https://docs.ruby-lang.org/ja/latest/method/URI/s/parse.html

ということで、URIの文字列にpathを良しなに結合してくれるメソッドです。
しかし、単に/を付けるだけの挙動をしているわけではありませんでした。


URI.joinの挙動

いかに例をいくつか書いておきます。

 # シンプルな例  
 str = "https://example.com"  
 URI.join(str, "home")  
 #=> #<URI::HTTPS https://example.com/home>  
 # base_uriにパスまで指定する場合  
 str = "https://example.com/hoge"  
 URI.join(str, "home")  
 #=> #<URI::HTTPS https://example.com/home>  
 # base_uriの末尾に/がある場合  
 str = "https://example.com/hoge/"  
 URI.join(str, "home")  
 => #<URI::HTTPS https://example.com/hoge/home>  
 # pathの先頭に/を置いた場合  
 str = "https://example.com/hoge/"  
 URI.join(str, "/home")  
 #=> #<URI::HTTPS https://example.com/home>

このように、シンプルな場合は想定通りの動きをしてくれますが、base_uriに/を付けているときや指定するパスに/がついている場合は若干挙動が変わります。

個人的には、/は連結先(pathのほう、/homeのよう)に付けがちだったので、単純にURI.joinに置き換えただけだと意図しないURIを返してしまう箇所がありました。
使う場合は、上記の例を参考に注意して使いましょう。

まとめ

今回は、RubyのURI.joinの挙動で詰まったところがあったので挙動をまとめました。
これまで個人的にしていたURI文字列の結合の仕方が、このメソッドとは合わなかったので置き換えただけではうまく動かず困ったので、同様なところで困っている方の参考になれば幸いです。

今回は、ここまで。
おわり

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

頭は記憶リムーバブルデバイス

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう