2025/1/11 学習記録

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

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

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

当面の目標：LPIC101,102合格


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

## HTTPリクエストの取得方法

### リクエストの解析:

```ruby
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を変更する方法

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

```ruby
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`を使用してパスを構築することをお勧めします：

```ruby
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について/](https://kj-blog.com/rails%E3%81%AEfile-read%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
[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の使い方/](https://polishruby.com/261/ruby%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E9%80%A3%E7%B5%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-concat%E3%81%A8join%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/)
[2] [https://kj-blog.com/railsのfile-readについて/](https://kj-blog.com/rails%E3%81%AEfile-read%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
[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](https://e-words.jp/w/MIME%E3%82%BF%E3%82%A4%E3%83%97.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






















### 今日はここまで！