現状:
エンジニアへの未経験転職。
就職先も決まり、2月からひよこエンジニアに。
2025年は頑張ろうということで、2025年学習記録9日目。
内容は常に書き散らしのメモです、あしからず。
当面の目標:LPIC101,102合格
Rubyのみでローカルホストに接続する方法
以下は、Rubyのコードスニペットに含まれる各行の詳細な解説です。
require 'socket'
-
意味: Rubyの標準ライブラリである
socket
を読み込みます。このライブラリは、TCP/IP通信を行うためのクラス(TCPServer
やTCPSocket
など)を提供します。
server = TCPServer.new(2000)
-
意味: ポート番号2000で新しいTCPサーバーを作成します。
TCPServer.new
メソッドは、指定したポートで接続要求を待ち受けるサーバーインスタンスを返します。このサーバーは、クライアントからの接続を受け入れる準備が整います。
loop do
- 意味: 無限ループを開始します。このループ内で、クライアントからの接続を待ち受け、処理を行います。無限ループにすることで、サーバーが常に動作し続けることができます。
client = server.accept
-
意味: クライアントからの接続を受け入れます。
accept
メソッドは、接続が確立されると新しいTCPSocket
インスタンス(ここではclient
)を返します。このインスタンスを通じて、クライアントとの通信が可能になります。
request = client.gets
-
意味: クライアントから送信されたリクエストデータを1行読み取ります。
gets
メソッドは、クライアントからのデータを受信し、その内容を変数request
に格納します。この行は、HTTPリクエストの内容を取得するために使用されますが、この例ではリクエスト内容は特に処理されていません。
response = "HTTP/1.1 200 OK\r\n"
- 意味: HTTPレスポンスの最初の行を設定します。この行はHTTPバージョンとステータスコード(ここでは200 OK)を示しています。これは、クライアントに対してリクエストが成功したことを伝えるためのものです。
response += "Content-Type: text/html\r\n"
- 意味: レスポンスヘッダーに「Content-Type」を追加します。このヘッダーは、レスポンスの内容がHTMLであることを示しています。これにより、ブラウザは受信したデータを正しく解釈できます。
response += "\r\n"
- 意味: ヘッダーとボディの区切りとして空行(CRLF)を追加します。HTTPプロトコルでは、ヘッダーとボディの間には必ず空行が必要です。
response += "<html><body><h1>Hello, Ruby!</h1></body></html>"
- 意味: HTTPレスポンスボディにHTMLコンテンツを追加します。この場合、「Hello, Ruby!」というメッセージが表示されるシンプルなHTML文書です。
client.print response
-
意味: 構築したHTTPレスポンス全体をクライアントに送信します。
print
メソッドは、指定されたデータをソケット経由で送信します。
client.close
- 意味: クライアントとの接続を閉じます。これにより、リソースが解放され、新たな接続が可能になります。サーバーは次のクライアントからの接続要求を待ち受ける状態になります。
end
-
意味:
loop do
の終わりです。これにより、無限ループが継続し、新しいクライアントからの接続待機状態に戻ります。
このコード全体は、非常にシンプルなHTTPサーバーとして機能し、ポート2000で接続されたクライアントに「Hello, Ruby!」というメッセージを返すことができます。
Citations:
[1] https://qiita.com/sho-19202325/items/6c677fdfaf279c3e4b4f
[2] https://zenn.dev/skakimoto/articles/2024-10-25-create-socket-ruby-wrapper
[3] https://zenn.dev/redheadchloe/articles/9f9cbac85e2717
[4] https://zenn.dev/kuredev/articles/aa26f88cd643de
[5] https://zenn.dev/tmtms/articles/202103-ruby-socket-tcp
[6] https://zenn.dev/oott0228/articles/8e509b699ea19e
[7] https://docs.ruby-lang.org/ja/latest/class/TCPServer.html
[8] https://docs.ruby-lang.org/ja/2.0.0/method/TCPServer/s/new.html
[9] https://www.twilio.com/ja-jp/blog/5-ways-make-http-requests-ruby-jp
[10] http://www2.nagano.ac.jp/hiraoka/NP/tcpServer1.html
[11] https://qiita.com/akiray03/items/0689497093c961a3e627
[12] https://blog.sarabande.jp/post/82583858106
gitコマンド
-
git init
:.git
ディレクトリの作成 -
git add .
:ファイルの変更内容をステージに追加する -
git commit -m "メッセージ"
:メッセージを付けたコミットを実行する