動かざることバグの如し

近づきたいよ 君の理想に

Rubyのrest-clientの使い方

環境

rest-clientとは

rest-client/rest-client: Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.

rest-client は、RubyでRESTful APIを簡単に扱うためのライブラリです。GETやPOSTメソッドを使用して、Web APIと通信することができます。今回は、初心者向けに rest-client の使い方を分かりやすく解説します。

rest-clientのインストール方法 rest-client をインストールするには、以下のコマンドを実行します。

GET

GETメソッドでパラメータを付けてリクエストを送る場合、以下のサンプルコードを参考にしてください。

require 'rest-client'
require 'json'

url = 'https://api.example.com/users'
params = {
  name: '山田太郎',
  age: 30
}

response = RestClient.get(url, params: params)

puts JSON.parse(response.body)

実行結果

{
  "id": 1,
  "name": "山田太郎",
  "age": 30
}

POST

POSTメソッドでパラメータを付けてリクエストを送る場合、以下のサンプルコードを参考にしてください。

require 'rest-client'
require 'json'

url = 'https://api.example.com/users'
params = {
  name: '山田太郎',
  age: 30
}

response = RestClient.post(url, params)

puts JSON.parse(response.body)
{
  "id": 1,
  "name": "山田太郎",
  "age": 30,
  "created_at": "2023-03-21T12:34:56.789Z"
}

タイムアウトを設定する場合

rest-client でタイムアウトを設定する場合、以下のサンプルコードを参考にしてください。

require 'rest-client'
require 'json'

url = 'https://api.example.com/users'
params = {
  name: '山田太郎',
  age: 30
}
options = {
  timeout: 5 # タイムアウトを5秒に設定
}

response = RestClient::Request.execute(method: :get, url: url, headers: {params: params}, **options)

puts JSON.parse(response.body)

注意点、補足

  • rest-client を使用する際は、必ず require 'rest-client' と記述してライブラリを読み込んでください。
  • リクエストの結果は response に格納されますが、そのままでは文字列として扱われるため、JSON形式に変換するには JSON.parse(response.body) を使用してください。

grepで指定した拡張子のみを対象にサブディレクトリも含めて検索する方法

やりたいこと

プログラマーLinux上で作業するとき、大量のコードを扱うことがあります。

その中で、特定の拡張子を持つファイルを検索する必要がある場合があります。また、複数のサブディレクトリにまたがって検索することもあります。 ここでは、Linuxのコマンド「grep」を使用して、指定した拡張子のみを対象にサブディレクトリも含めて検索する方法を説明します。

コマンド

以下のコマンドを使用して、指定した拡張子のみを対象にサブディレクトリも含めて検索できます。

grep -r --include="*.拡張子" "検索ワード" /ディレクトリのパス

このコマンドは、-rオプションを使用して、サブディレクトリも含めて再帰的に検索します。 --includeオプションを使用して、指定した拡張子のみを対象に検索します。検索するディレクトリのパスは、/ディレクトリのパスのように指定します。検索ワードは、検索したいキーワードを指定します。

例えば、拡張子が.pyのファイル内で、"Hello World"という文字列を検索する場合、以下のコマンドを使用します。

grep -r --include="*.py" "Hello World" /ディレクトリのパス

これにより、/ディレクトリのパス以下のすべての.pyファイルで、"Hello World"という文字列が含まれる行が表示されます。

以上で、grepコマンドを使用して、指定した拡張子のみを対象にサブディレクトリも含めて検索する方法について説明しました。

limaからcolimaに乗り換えた

limaよくバグる問題

M2のMacbookではDocker Desktopではなくlimaを使うようにした。が、ネットワーク周りでバグがあるっぽくて、macをスリープさせてから復帰するとDockerが使えない問題が多々あった。

Stuck on "ssh" or "user session is ready for ssh" · Issue #1288 · lima-vm/lima

一度繋がらなくなるとVM再起動かファクトリーリセットしなければならず結構面倒だった

そこでcolimaを使ってみたら直ったのでメモ

colimaとは

https://github.com/abiosoft/colima

名前の通りlimaの仲間。というよりlimaのラッパーでしかない。だから正直本質的な問題は何も解決してないと思われる。

が、使えるようになったのでオールオッケーということで、、。

オプションは以下

❯ colima start --cpu 4 --memory 8 --disk 40 --dns 1.1.1.1 --vm-type vz --vz-rosetta --mount-type virtiofs

Service、Gateway、VirtualServiceの違い

k8sリソースの種類多すぎ問題

紛らわしいService、Gateway、VirtualServiceについてそれぞれメモ

Service

Serviceは、Kubernetesクラスタ内のマイクロサービス間の通信を制御するために使用されるリソースです。Serviceは、1つ以上のPodをグループ化し、グループ内のPodに対する一意のDNS名とIPアドレスを提供します。また、Serviceは、クラスタ内の他のマイクロサービスからアクセス可能なポートを公開することができます。Serviceは、ClusterIP、NodePort、LoadBalancer、ExternalNameの4つのタイプがあります。

Serviceがない場合、マイクロサービスは直接IPアドレスを使用して通信する必要があります。これは、スケーラビリティやメンテナンス性の観点から好ましくなく、また、Serviceが提供するDNS名とIPアドレスを利用することで、より柔軟なリソース管理が可能となります。Serviceを使用することで、マイクロサービス間の通信の可用性や耐久性を向上させることができます。

Gateway

Gatewayは、IstioなどのService Meshにおいて使用されるリソースで、外部からService Meshにアクセスするための入り口を提供するために使用されます。Gatewayは、ホスト名、ポート、プロトコルなどを指定し、Service Mesh内のServiceに接続するためのルールを定義します。

Gatewayがない場合、外部からService Meshへのアクセスが制限されます。これは、Service Mesh内のマイクロサービスを外部に公開する必要がある場合に不便です。Gatewayを使用することで、Service Mesh内のマイクロサービスを外部に公開し、外部からのアクセスを制御することができます。

VirtualService

VirtualServiceは、IstioなどのService Meshにおいて使用されるリソースで、リクエストルーティングを制御するために使用されます。VirtualServiceは、マッチ条件とアクションを定義し、リクエストを対応するServiceにルーティングするためのルールを設定します。VirtualServiceは、ヘッダー、パス、HTTPメソッドなどのマッチ条件を指定できます。

VirtualServiceがない場合、リクエストのルーティングが固定されてしまい、マイクロサービスの可用性やメンテナンス性の向上が困難となります。VirtualServiceを使用することで、リクエストのルーティングを柔軟に制御し、マイクロサービスの可用性やメンテナンス性を向上させることができます。

Envelope (Outer Fit) と ・Scale to Fit (Inner Fit)の違い

EnvelopeとScale to Fitの違い

Envelope (Outer Fit) と ・Scale to Fit (Inner Fit) の違いについて解説します。

  • Envelope (Outer Fit) は、元の画像のアスペクト比(縦横比)を保ったまま、キャンバスの幅と高さに合わせて拡大・縮小する方法
  • Scale to Fit (Inner Fit) は、元の画像のアスペクト比(縦横比)を保ったまま、キャンバスに収まるように拡大・縮小する方法

例えば、元の画像が正方形で、キャンバスが長方形だとします。この場合、

  • Envelope (Outer Fit) を選ぶと、画像はキャンバスの幅と高さにピッタリ合うように拡大されますが、余白はできません。
  • Scale to Fit (Inner Fit) を選ぶと、画像はキャンバスの一辺にピッタリ合うように拡大されますが、もう一辺に余白ができます。