0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2025/1/11 学習記録

Posted at

現状:

エンジニアへの未経験転職。
就職先も決まり、2月からひよこエンジニアに。

2025年は頑張ろうということで、2025年学習記録10日目。
昨日はなんやかんやで忙しかったため未学習。

内容は常に書き散らしのメモです、あしからず。

当面の目標:LPIC101,102合格

アプリケーションの修正内容が反映されない

  • localhostでアクセスする際、エディタの修正内容が反映されない
    → アプリケーションサーバーの再起動をしていなかった。

HTTPリクエストの取得方法

リクエストの解析:

rubyrequest_path = client.gets.split[1]

この行によって、HTTPリクエストの最初の行からリクエストパスを抽出する。

動作:

  1. client.gets:クライアントからの入力の最初の行を読み取る。これは通常、HTTPリクエストの最初の行です[1][6]。
  2. .split[1]は、読み取った行を空白文字で分割し、その結果の配列の2番目の要素(インデックス1)を取得します[1][6]。

典型的なHTTPリクエストの最初の行は以下のような形式です:

GET /path/to/resource HTTP/1.1

この行を分割すると、以下のような配列になります:

["GET", "/path/to/resource", "HTTP/1.1"]

そして、[1]でこの配列の2番目の要素("/path/to/resource")を取得します。

したがって、request_path変数には、クライアントがリクエストしたリソースのパスが格納されます[2][8]。このパスは後続のコードでルーティングやリソースの特定に使用できます。

Citations:

[1] https://github.com/cotag/http-parser
[2] https://docs.ruby-lang.org/ja/latest/method/URI=3a=3aHTTP/i/request_uri.html
[3] https://ruby-doc.org/stdlib-2.5.1/libdoc/uri/rdoc/URI.html
[4] https://qiita.com/takano-h/items/dd10818eb7e09161bc29
[5] https://stackoverflow.com/questions/18703980/ruby-uri-parsing-parent-path
[6] https://qiita.com/katu_/items/a116c261c8616fd01fca
[7] https://docs.ruby-lang.org/ja/latest/method/Net=3a=3aHTTPGenericRequest/i/path.html
[8] https://docs.ruby-lang.org/ja/latest/method/URI=3a=3aGeneric/i/path.html

HTTPリクエストごとに渡すHTMLを変更する方法

アプリのルートディレクトリからの絶対パスを使用する場合

content = case request_path
when "/"
  File.read("views/index.html")
when "/about"
  File.read("views/about.html")
when "/contact"
  File.read("views/contact.html")
else
  "<html><body><h1>404 Not Found</h1></body></html>"
end

この変更により、File.readメソッドはviewsディレクトリ内のファイルを読み込むようになります[1]。

アプリのルートディレクトリからの相対パスを使用する場合

File.joinを使用してパスを構築することをお勧めします:

content = case request_path
when "/"
  File.read(File.join("views", "index.html"))
when "/about"
  File.read(File.join("views", "about.html"))
when "/contact"
  File.read(File.join("views", "contact.html"))
else
  "<html><body><h1>404 Not Found</h1></body></html>"
end

この方法を使用すると、異なるオペレーティングシステム間でのパス区切り文字の違いを考慮する必要がなくなり、より堅牢なコードになります[1]。

Citations:

[1] https://kj-blog.com/railsのfile-readについて/
[2] https://zenn.dev/peishim/articles/49822b95ba6674
[3] https://qiita.com/Yaruki00/items/03eb2b6dd96dc44f18b6
[4] https://melborne.github.io/2013/10/21/visualize-ruby-files-with-graphviz/

File.join の挙動、堅牢になる理由

挙動:

  1. File.join("views", "index.html"): "views"と"index.html"を適切なファイルパス区切り文字で結合します[1][3]。
  2. 結果として得られるパス(例:"views/index.html")をFile.readメソッドに渡します。
  3. File.readは指定されたパスのファイルの全内容を文字列として読み込みます[2]。

堅牢である理由:

  1. クロスプラットフォーム互換性: File.joinはオペレーティングシステムに応じて適切なパス区切り文字(Windowsでは"", Unix系では"/")を使用します[1][3]。
  2. パスの正規化: 余分なパス区切り文字を自動的に処理し、適切なパスを生成します[3]。
  3. セキュリティ: ハードコードされたパス区切り文字を使用するよりも、意図しないパス操作のリスクを減らします。

Citations:

[1] https://polishruby.com/261/rubyでファイル名を連結する方法-concatとjoinの使い方/
[2] https://kj-blog.com/railsのfile-readについて/
[3] https://docs.ruby-lang.org/ja/latest/method/File/s/join.html

MIMEタイプ(Multi-purpose Internet Mail Extensions)

  • ファイルの種類を識別するためのコードの体系。
  • Webサーバからブラウザへのレスポンスヘッダーの「Content-Type」フィールドで指定され、ファイルの適切な処理と表示を可能にする。

特徴:

  1. 形式: 「タイプ名/サブタイプ名」の形式で記述されます[1][3]。
    例: text/html (HTML文書), image/jpeg (JPEG画像)
  2. 用途:
    • 電子メールで文字以外のデータを含める際に使用[1]
    • Webサーバとブラウザでデータのやりとりをする際にファイル形式を指定[3]
  3. 主なタイプ:
    • text (文字)
    • image (画像)
    • video (動画)
    • audio (音声)
    • application (アプリケーション固有)
    • message (メールメッセージ)
    • multipart (複数形式が混在)[1]
  4. ブラウザの処理:
    MIMEタイプに基づいて、ブラウザはファイルの処理方法を決定します。例えば、「text/html」はHTMLとして表示し、「application/octet-stream」はダウンロードを行います[3]。

Citations:

[1] https://e-words.jp/w/MIMEタイプ.html
[2] https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/mime_type/
[3] https://qiita.com/Hamoto/items/dfff7e43e27887164aae
[4] https://www.1strentalserver.com/1st/manual/4_mime-types.html
[5] https://wa3.i-3-i.info/word15786.html
[6] https://zenn.dev/skrikzts/articles/635bd0b630c289
[7] https://developer.mozilla.org/ja/docs/Glossary/MIME_type
[8] https://developer.mozilla.org/ja/docs/Web/HTTP/MIME_types

今日はここまで!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?