みそみそりんりんblog

勉強したことを書いていきます

Rubyの"graphql-client"使ってみた

前提

叩きたいAPIにGraphQLが用意されており、折角なので触ってみる

実装内容

Gemfileに以下を記述して、gemをinstall

gem "graphql-client"

APIのラッパーを作成する

require "graphql/client"
require "graphql/client/http"

module Api
  # GraphQLのエンドポイント、ヘッダー情報作成
  HTTP = GraphQL::Client::HTTP.new(ENV['END_POINT']) do
    def headers(context)
      { "#{ENV['HEADER_KEY']}": ENV['HEADER_VALUE'] }
    end
  end

  # 初期化で、最新のネットワーク取得 & リクエスト
  Schema = GraphQL::Client.load_schema(HTTP)
  Client = GraphQL::Client.new(schema: Schema, execute: HTTP)
end

実行してみる

Query = Api::Client.parse <<-'GRAPHQL'
  query {
    hero {
      name
    }
  }
GRAPHQL

result = Api::Client.query(Query)

p result

=begin
#<GraphQL::Client::Response:0x0000ffff9bc01408
@data=#<#<Module:0x0000ffffa0125e58>::Query viewer=...>,
@errors=#<GraphQL::Client::Errors @messages={} @details={}>,
@extensions=nil,
@original_hash={"xxxx"=>{"xxxxx"=>{"xxxxx"=>"xxxxx", "name"=>"xxxx"}}}>
=end

感想

GraphQL理解する良い機会になった.
APIサーバーの方も作ってみようかな

参考サイト

GitHub - github/graphql-client: A Ruby library for declaring, composing and executing GraphQL queries

RubyでCSVの文字コードをsjisにして出力する

前提

コード

csv_string = CSV.generate(encoding: Encoding::SJIS, force_quotes: true) do |csv|
   csv << ["ホゲホゲええ"]
end

csv_string.encoding

# =>  #<Encoding:Windows-31J>

感想

  • これからも使うことになりそうなのでメモ

参考文献

CSV.generateでUTF-8からShift−JISに変換したときの文字コード変換エラーを回避する - 行動すれば次の現実

class CSV (Ruby 3.1 リファレンスマニュアル)

UbuntuServerで、ファイルサーバ(NAS)立ち上げてみた

実行環境

経緯

やっぱり、サーバの勉強ついでにもなるし
プライベートなファイルを保存するのに、ファイルサーバ欲しいよな???

手順

アップデート(最新状態にする)

sudo apt update

アップグレードできるpackageがありますよと出たら、以下のコマンド実行

sudo apt upgrade

sambaのインストール(ファイルサーバーを実現するためのソフトウェア)

sudo apt install samba

sambaにユーザーを登録する(Ubuntuに登録されているアカウント)

sudo pdbedit -a [ユーザー名]

共有するディレクトリを作成

mkdir -p /home/ubuntu/share

アクセス権限設定

sudo chmod 0777 /home/ubuntu/share

sambaの設定

sudo vi /etc/samba/smb.conf

以下追記

[global]
  dos charset = CP932  # Windows側で利用されている文字コード指定
  unix charset = UTF-8  # UNIX上のファイルシステムに用いられている文字
  ...
  # 行の初めのセミコロンはずす
  # 自身のubuntuのIPアドレスを書き込む(ip adress showで見れる)
  interfaces = 192.168.XX.0/24 xxxx
  ...
  bind interfaces only = yes # 行の初めについていたセミコロンはずす
  map to guest = bad User  # 追記
  ...
[share] # 表示名 他のデバイスからアクセスする際に表示される
  path = /home/ubuntu/share
  writeable = yes
  guest ok = yes
  guest only = yes
  create mode = 0777
  directory mode = 0777

書き込み後

testparm

↑でsmb.confに誤りがないかチェック

sambaの実行

sudo systemctl restart smbd nmbd

↑smb.confの編集が反映される
sambaは、smbdとnmbdの2つのデーモンにより動いている
sbmd:クライアントにファイル共有と印刷サービスを提供するデーモン
nmbd:NetBIOSネームサービス(名前解決)とブラウジング機能を提供するデーモン

sudo systemctl enable smbd nmbd

Ubuntuの起動時に自動で実行される

これで、同じネットワーク内の他のデバイスなら
ファイルにアクセスできるようになる

iPhoneからアクセス

感想

次は、外部アクセスできるように、
設定できるようにしたいな
いっぱい画像保存するよ〜

参考文献

Ubuntu 20.04 でファイルサーバー(NAS)を作ろう! | Beightlyouch

users.miraclelinux.com

Rubyのメソッドの引数がHashの時、fetch使わんやつおる??

初期化の際の引数にハッシュを使う

「 | | 」を使った場合

def initialize(args)
  @id  = args[:id] || 1
  @name = args[:name] || "misomiso"
end

↑これだと、falseとnilの区別ができねえじゃねえか!

「fetch」を使うと...

def initialize(args)
  @id = args.fetch(:id, 1)
  @name = args.fetch(:name, "misomiso")
  @flag = args.fetch(:flag, true)
end

fetchでええやん

参考文献

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 | Sandi Metz, 髙山泰基 | 工学 | Kindleストア | Amazon

rmagickの使い方まとめ

rmagic使い方

### ファイルを読み込む
image_data = Magick::Image.read(img.path).first

### ファイルのフォーマット(PNG, JPG etc...)
image_data.format

### ファイルのサイズ
image_data.filesize

疑問点

最初は↓

Magick::Image.from_blob(buffer).shift

でファイルを読み込んでいたのだが、 「ai」ファイルが「pdf」判定されていた
.readを使うことによってちゃんと判定してくれたよん
原因わかったら、書き足します

CentOS8 で ruby gem "rmagick" インストール

Linuxに"Image Magic" をインストール

$ yum install -y libwebp libwebp-devel

$ wget https://imagemagick.org/download/ImageMagick.tar.gz

$ tar zxvf ImageMagick.tar.gz

# makefileにルールが追加される
$ ./configure

# コンパイル
$ make

# コンパイルしたプログラムをインストール
$ sudo make install

"rmagic"をインストール

#  MagickCore.pcがあるディレクトリを環境変数に入れる
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

$ bundle install

感想

クソ時間かかったのでメモ

参考文献

RMagick をレンタルサーバーにインストールするのではまった | EasyRamble

ImageMagick – Install from Source

Amazon Linux 2 に ImageMagick をインストールする - Qiita

Sinatra layoutのネストについて

実行環境

問題

layoutを2重でネストさせたい

解決策

erb :"内側のlayout", :layout => :"外側のlayout" do
  erb :user(対象のview)
end

↑これでいけるわ
sinatraのREADME最強!

参考にしたサイト

sinatrarb.com