ためすう

Gem と Rails Engine と Railtie

2020-03-07

やったこと

ある処理の共通化をするにあたり調べて目にした、下記について書きます。

  • Gem
  • Rails Engine
  • Railtie

内容

Gem

RubyGems で公開されているRubyプログラムのことを指します。

以下 Gem の例です。

  • Ruby スクリプト
  • Rails Engine
  • Railtie プラグイン

Rails Engine

エンジン (engine) は、ホストとなるRailsアプリケーションに機能を提供するミニチュア版Railsアプリケーションとみなせます。

mountable

Generate mountable isolated application

full

Generate a rails engine with bundled Rails application for testing

Railtie

Rails::Railtie is the core of the Rails framework and provides several hooks to extend Rails and/or modify the initialization process.

Rails の初期化処理において、拡張できるようにしたRailsのコア部分。

参考

screen コマンドを使ってみる (Unix)

2020-03-01

やったこと

並び替えを行う sort を使ってみます。

調査

使ってみる

セッションを作る

$ screen

スクリーン一覧を見る

2つスクリーンを貼った後

プロセス確認
$ ps aux | grep SCREEN
xxxxx         61113   0.0  0.0  4267768    836 s010  S+   11:20PM   0:00.00 grep SCREEN
xxxxx         60951   0.0  0.0  4288536    704   ??  Ss   11:20PM   0:00.00 SCREEN
xxxxx         57918   0.0  0.0  4288536    744   ??  Ss   11:16PM   0:00.03 SCREEN

$ screen -ls
There are screens on:
	60951.ttys010.xxxxx-no-MacBook-Pro	(Detached)
	57918.ttys010.xxxxx-no-MacBook-Pro	(Detached)
2 Sockets in /var/folders/v6/8f5kfrfd00d6ghb308jj68yr0000gn/T/.screen.

スクリーンごとにプロセスが存在することが分かります。

detach

<crl> + a
d

attach

$ screen -r [プロセスID]

man より抜粋

DESCRIPTION Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typi- cally interactive shells).

参考

sort を使ってみる (Unix)

2020-03-01

やったこと

並び替えを行う sort を使ってみます。

調査

使ってみる

今回はファイル内の数字を逆順に並べてみたいと思います。

abc.md ファイルの中身はこのようにしました。

$ cat abc.md
23
1
12
34
9
22

文字列として sort されるパターン

$ sort abc.md
1
12
22
23
34
9

数字として昇順に sort されるパターン

$ sort -n abc.md
1
9
12
22
23
34

数字として降順に sort されるパターン

$ sort -rn abc.md
34
23
22
12
9
1

man sort より抜粋

 -n, --numeric-sort, --sort=numeric
         Sort fields numerically by arithmetic value.  Fields are supposed to have optional blanks in the begin-
         ning, an optional minus sign, zero or more digits (including decimal point and possible thousand separa-
         tors).

 -r, --reverse
         Sort in reverse order.

du コマンドを使ってサーバーの容量を確認する (Unix)

2020-02-29

やったこと

サーバーの容量の状態を調べるとき、どこのディレクトリで容量を使っているのかを調べます。

調査

man du より抜粋

NAME du – display disk usage statistics

-h      "Human-readable" output.  Use unit suffixes: Byte, Kilobyte,

Megabyte, Gigabyte, Terabyte and Petabyte.

-s      Display an entry for each specified file.  (Equivalent to -d 0)

使ってみる

$ du -sh ./*
 36K	./AUTHORS
124K	./CHANGELOG
 12K	./CMakeLists.txt
8.0K	./README.md
1.7M	./build
 17M	./cocos
312K	./docs
 12K	./download-deps.py
580K	./extensions
165M	./external
136K	./licenses
 43M	./plugin
 24K	./setup.py
 76M	./templates
124M	./tests
 88M	./tools

多い順にソートした場合

$ du -sh ./* | sort -hr
165M	./external
124M	./tests
 88M	./tools
 76M	./templates
 43M	./plugin
 17M	./cocos
1.7M	./build
580K	./extensions
312K	./docs
136K	./licenses
124K	./CHANGELOG
 36K	./AUTHORS
 24K	./setup.py
 12K	./download-deps.py
 12K	./CMakeLists.txt
8.0K	./README.md

AUTO INCREMENT の値を確認する (MySQL)

2020-02-29

やったこと

データベースのテーブルにある AUTO_INCREMENT の値を確認します。

確認環境

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using  EditLine wrapper

調査

SELECT
  auto_increment, table_name
FROM
information_schema.tables
WHERE table_schema = 'learning'
;

出力結果

+----------------+------------+
| auto_increment | table_name |
+----------------+------------+
|             10 | aaa        |
|           NULL | bbb        |
|              6 | ccc        |
+----------------+------------+

vim で改行を消す

2020-02-24

やったこと

vim で改行を消してみます。

調査

変更前

test.txt

aaa
bbb
ccc
1
2
3
1
2
3

VISUAL LINE で全選択してから、置換します。 改行コードを削除します。

:'<,'>s/\n//g

変更後

test.txt

aaabbbccc123123

test コマンドを使ってみる (unix)

2020-02-23

やったこと

unix の test コマンドを使ってみます。

調査

man より抜粋

DESCRIPTION The test utility evaluates the expression and, if it evaluates to true, returns a zero (true) exit status; oth- erwise it returns 1 (false). If there is no expression, test also returns 1 (false).

$ ls -ls
total 0
0 drwxr-xr-x  2 xxxxx  wheel  64  2 23 22:29 a_dir
0 -rw-r--r--  1 xxxxx  wheel   0  2 23 22:29 abc.txt

ファイルがあるかどうかの確認

$ test -e a_dir; echo $?
0
$ test -e abc.txt; echo $?
0
$ test -e abc222.txt; echo $?
1

ディレクトリかどうかの確認

$ test -d abc222.txt; echo $?
1
$ test -d abc.txt; echo $?
1
$ test -d a_dir; echo $?
0

TRUNCATE を使ってみる (MySQL)

2020-02-16

やったこと

MySQL の truncate を使ってみます。

テーブルを空にする方ではなく、数値を削るほうです。

確認環境

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using  EditLine wrapper

調査

TRUNCATE(X,D)

D 小数点に切り捨てて、数字 X を返します。D が 0 の場合は、結果に小数点または小数部が含まれません。D を負の数に指定すると、値 X の小数点左側の D 桁をゼロにすることができます。

小数点をどこまで残すか、指定できます。

mysql> SELECT TRUNCATE(1.234, 0);
+--------------------+
| TRUNCATE(1.234, 0) |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(1.234, 1);
+--------------------+
| TRUNCATE(1.234, 1) |
+--------------------+
|                1.2 |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(1.234567, 5);
+-----------------------+
| TRUNCATE(1.234567, 5) |
+-----------------------+
|               1.23456 |
+-----------------------+
1 row in set (0.00 sec)

参考

is_a?, kind_of? を使ってみる (Ruby)

2020-02-16

やったこと

is_a?kind_of? を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

is_a? と kind_of? の違いはあるのか

下記を見ると、全く同じメソッドのようです。

ruby/object.c at 6b86549df8f6d48eeab3c7b48b3fd9ee02f744ba · ruby/ruby

動かしてみる

is_a.rb

module M
end

class Sample < Object
end

obj = Sample.new


p 'is_a?'
p obj.is_a?(Sample)
p obj.is_a?(Object)
p obj.is_a?(M)
p obj.is_a?(Integer)

p 'kind_of?'
p obj.kind_of?(Sample)
p obj.kind_of?(Object)
p obj.kind_of?(M)
p obj.kind_of?(Integer)

出力結果

$ ruby is_a.rb
"is_a?"
true
true
false
false
"kind_of?"
true
true
false
false

参考

Time の usec を 0 で指定する (Rails)

2020-02-16

やったこと

時間を取り扱う時、usec を 0 でセットする方法を試します。

例えば、rspec など自動テストをする時

  • MySQL に保存する
  • 値を取り出す

とした場合、usec が削り落とされ 0 になってしまうことがあります。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

始めは、usec が設定されていますが、change を使うことで 0 に設定できました。

$ rails c
Running via Spring preloader in process 42292
Loading development environment (Rails 5.2.3)
irb(main):001:0> a = Time.current
=> Sun, 16 Feb 2020 01:19:08 JST +09:00
irb(main):002:0> a.usec
=> 87388
irb(main):003:0> a.change(usec: 0).usec
=> 0

参考