ぶろぐ

日記です

サーバーの環境変数をどこに書くのか問題

RailsやGoなどで環境ごとに異なる設定は環境変数から読み込むようにしていることが多いと思う。
ローカルだと.zshrcや.bashrcに書くことが多いがサーバーではどうするか。

/etc/profile.d

もしくは

/etc/environment

に記述する。いつも後者に記述していたが、もしかしたら前者に記述した方がいいのかも。

Goのテストパッケージの末尾に_testをつけるかつけないか問題

一行

原則つけたほうが良い。

違い

末尾に_testを付ける場合

対象のパッケージとは別物と認識され、private methodを呼び出すことはできなくなる。
ここでprivate methodのテストができないじゃないか問題が発生するが、外部に公開している振る舞いのテストが担保されていれば問題ないという考え方をベースにすればprivate methodのテストを行う必要は無いため問題ない。public methodを呼び出すことでprivate methodを疎通させてカバレッジをカバーすれば良い。

private methodまでテストを書くと、継続的にリファクタリングや機能追加を攻めて行うためにテストコードを書いているのに、それのメンテコストがかかり足を引っ張ってしまうことになるっぽい。例えば機能追加をしようと思ったらテストコードめっちゃ書き換えないといけない・・・とか。

どうしてもprivate methodのテストを行いたい場合は、_internal_test.goとかいう名前のファイルを作り別だしにして書いている人とかいるみたい。

末尾に_testをつけない場合

実コードと同じパッケージとみなされるため、private methodも含めすべて参照できる。詳細なテストが可能。
闇雲にすべてのテストを書くと見通しが悪くなることがあるのと、メンテのコストも掛かるので気をつけるべし。

どうするのが良いのか(個人的な意見)

原則として_testをつけて、このパッケージの利用者観点で振る舞いのテストが行えればOK。
private methodのテストも行いたい場合は_testをつけずにファイル名を_internal_test.goとしてテストコードを書く。
private methodのテストがとても重要なら、_testをつけずに xxx_test.go などのファイルにテスト書いてしまってもいいと思う。

iDeco、受給時に税金がかかるから結局いくら節税になるのか考えるのがめんどくさくなり、その金で自分で運用したほうが儲かるんじゃないかと思って踏みとどまった。
運用中は非課税だから複利のメリットが大きいということでいいのかな?

少し調べてみると、受給時には控除枠が存在するらしい。

わしらプログラマーは退職金ないのが普通なので、控除額MAXまでは入れておいたほうがいいのかも。
https://style.nikkei.com/article/DGXMZO08497510Y6A011C1PPD001

勤続年数が30年であれば退職所得控除は1500万円

今から掛金MAXの23000円を預けても控除額に達しないな。よし、申し込も。

控除枠を使い切るのは節税の基本な気がした。という雑なメモ。

Install rbenv and nodenv

Amazon Linux2(CentOS7)

Rails5を動かすために。コマンドだけ貼っとく。

# 事前準備
yum -y install git
yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel
yum -y install mysql mysql-devel

# rbenv install
git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/bashrc
echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/bashrc
echo 'eval "$(rbenv init -)"' >> /etc/bashrc

# ruby-build
git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
rbenv install -v 2.6.0
rbenv global 2.6.0
rbenv rehash
rbenv exec gem install bundler
rbenv rehash

# nodenv install
git clone git://github.com/nodenv/nodenv.git /usr/local/nodenv
echo 'export NODENV_ROOT="/usr/local/nodenv"' >> /etc/bashrc
echo 'export PATH="${NODENV_ROOT}/bin:${PATH}"' >> /etc/bashrc
echo 'eval "$(nodenv init -)"' >> /etc/bashrc

# node-build
git clone https://github.com/nodenv/node-build.git /usr/local/nodenv/plugins/node-build
nodenv install 10.7.0
nodenv rehash
nodenv global 10.7.0

nginx

sudo amazon-linux-extras install nginx1.12 -y
sudo systemctl start nginx.service
sudo systemctl status nginx.service
sudo systemctl enable nginx.service

nginx config抜粋

upstream puma {
    server unix:///opt/xxx/shared/tmp/sockets/puma.sock;
}

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://puma;
    }
}

firewalldが動いていたら止める

systemctl status firewalld.service
systemctl stop firewalld.service

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.

エラー

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.10'` succeeds before bundling.

解決方法

sudo yum install mysql mysql-devel