2023年買ってよかったもの

iPhone15 Pro

毎年値段が上がるので周囲ではAndroidに転向する人も出てきましたが今年も頑張って購入しました。

Ankerのモバイルバッテリー

サイズ感がちょうど良いのとケーブルを持ち歩く必要がないので最近の普段使いはこれに落ち着きました。

aarkeの炭酸水メーカー

こういったオシャレ家電は使わなくなることのほうが多いのですが、自宅で炭酸水をつくれることが意外と便利で日常的に使う家電の仲間入りをしました。

ダンベル 10kg

体力維持レベルの運動が目的なので10kgでも充分でした。しっかりしたダンベルは数万円するので購入に勇気がいりますが、こちらは1万円台で購入しやすい価格帯ということも満足度につながりました。ダンベルが良かったので調子に乗ってベンチも買いましたが、残念ながら埃をかぶりはじめています。

耐熱ボウル

耐熱ボウルの5点セットです。最初は欲しいサイズの1点だけを予定していましたが、実際に使ってみるとそれぞれのサイズで使い分けたほうが圧倒的に料理しやすいのでセットを購入して良かったと思います。

マキネッタ

夏場にアイスカフェラテをつくるのに大活躍しました。手入れも大雑把でいいので性分に合っていました。豆を自分で挽くか悩みましたが、面倒になり使用する機会が減ると思ったので、豆を購入した時にお店で挽いてもらいました。

RICOH GR IIIx

サイズ感と重さと軽さが自分の生活に合っていました。iPhone15 Pro購入以降は持ち出す回数が減りましたが、旅行に行った時などにGRを使用しています。数年前に思い切って購入したミラーレス一眼は、今年は使用する機会がなかったので来年売却するか悩んでいます。

漫画

最近読んで面白い作品でした。

PS5

年末年始のお供にホグワーツ・レガシーと合わせて購入しました。ゲームはエンタメの最先端のひとつであることを学びました。

Rustでdotenvyを使用する

Rustでdotenvのcrateはメンテナンスが行われていないらしく以下の記事を参考にdotenvyを使用しました。

zenn.dev

github.com

$ cargo add dotenvy

適当に.envを作成

FOO=bar
use dotenvy::dotenv;
use std::env;

fn main() {
    dotenv().expect(".env file not found");

    let val = env::var("FOO").expect("FOO not set");
    println!("Foo: {val}");
}
$ cargo run
Foo: bar

Microsoft Remote DesktopでHHKBを使う

Windows環境での作業が必要になったので、 リモートデスクトップMacからWindowsを使用するための準備を行いました。

リモートデスクトップ接続するためのアプリはいくつか候補がありましたが、 今回は用途に合っていた「Microsoft Remote Desktop」を選びました。

Windows 11 Homeを使用していましたが、 Microsoft Remote Desktopで接続するにはProエディションにする必要があったため Windows 11 Proを購入しました。

普段Macを使用しているので、 Microsoft Remote Desktopで接続した時のWindowsキーIMEの切り替え操作に馴染めず、 Karabinerに以下のルールを追加しました。

  • 左のcommandキーをWinのControlキー
  • 右のcommandキーをWinのIME切り替え
{
  "title": "Custom rules for Remote Desktop",
  "rules": [
    {
      "description": "Swap left_control and left_command in Remote Desktop",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "left_command",
            "modifiers": {
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "left_control"
            }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.microsoft\\.rdc\\.macos$"
              ]
            }
          ]
        }
      ]
    },
    {
      "description": "Toggle IME with right_command in Remote Desktop",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "right_command",
            "modifiers": {
              "optional": ["any"]
            }
          },
          "to": [
            {
              "key_code": "grave_accent_and_tilde",
              "modifiers": ["right_alt"]
            }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.microsoft\\.rdc\\.macos$"
              ]
            }
          ]
        }
      ]
    }
  ]
}

さくらVPSにPostgresqlをインストール

さくらVPSPostgresqlをインストールした時のメモ

# yum update -y
# yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
# yum install -y postgresql96-server postgresql96-contrib postgresql96-devel
# psql --version
psql (PostgreSQL) 9.6.11

初期化

# export PGSETUP_INITDB_OPTIONS="--encoding=UTF-8 --no-locale"
# /usr/pgsql-9.6/bin/postgresql96-setup initdb
# systemctl enable postgresql-9.6
# systemctl start postgresql-9.6

認証方法を変更

$ sudo vim /var/lib/pgsql/9.6/data/pg_hba.conf

peerをtrustに、identをmd5に変更

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

参考

さくらVPSでRubyの環境構築

さくらVPSRailsの環境構築を行った際のメモ。

セットアップ

  • OSインストール
  • ssh接続を確認
$ ssh root@xxx.xxx.xxx.xxx
# yum update
  • 一般ユーザー作成
# adduser vpsuser
# passwd vpsuser
# exit
$ ssh vpsuser@xxx.xxx.xxx.xxx
$ su -
  • sudo 設定の有効化
# usermod -G wheel vpsuser

次回ログイン以降に設定が有効化

$ sudo id
[sudo] password for vpsuser:
uid=0(root) gid=0(root) groups=0(root)
  • rootで直接アクセスを不可に変更
# cd /etc/ssh
# cp sshd_config sshd_config.old
# vim sshd_config

変更前

#PermitRootLogin yes 

変更後

PermitRootLogin no
  • 変更を保存後、sshdを再起動
# systemctl restart sshd.service
  • rootユーザーでssh接続不可を確認
$ ssh root@xxx.xxx.xxx.xxx

以上で一般ユーザーで接続できるところまで準備できました。

鍵認証設定

  • 前提:秘密鍵と公開鍵を作成済
  • 公開鍵をコピー
$ cat ~/.ssh/id_rsa.pub
$ mkdir .ssh && chmod 700 .ssh && cd .ssh
  • .sshディレクトリの下でauthorized_keysを作成し、コピーした公開鍵を貼り付け
$ vim authorized_keys
  • ファイルの読み書きを自分のみに変更
$ chmod 600 authorized_keys
  • 公開鍵で接続確認
$ ssh -i ~/.ssh/id_rsa vpsuser@xxx.xxx.xxx.xxx
  • パスワードによるログインを不可に変更
$ su -
# cd /etc/ssh
# vim sshd_config

変更前

#PasswordAuthentication yes 

変更後

PasswordAuthentication no
  • 変更を保存後、sshdを再起動
# systemctl restart sshd.service

パスワードによるログインができないこと、公開鍵認証によるログインができることを確認して完了します。

ssh接続用ポート番号の変更

$ su -
# vim /etc/ssh/sshd_config
  • ポート番号を任意の値に設定
#Port 22
Port 10022
  • 変更を保存後、sshdを再起動
# systemctl restart sshd.service
  • firewalld の設定ファイルを編集。ポート番号の22の部分を変更。
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>
  • 変更を保存後、設定を有効化
# firewall-cmd --reload
success
  • ポート番号を指定して接続を確認
$ ssh vpsuser@xxx.xxx.xxx.xxx -p 10022

Rubyの環境構築

  • Ruby のインストールに必要なライブラリをインストール
$ sudo yum install -y openssl-devel zlib-devel readline-devel libyaml-devel libffi-devel
  • rbenv をインストール
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ rbenv install 2.5.3
$ rbenv global 2.5.3
$ rbenv rehash

参考

Laravelでメールアドレスを暗号化・復号化

Laravelでメールアドレスを暗号化・復号化して使用する時のメモ。

やりたいこと

  • 保存する時にメールアドレスを暗号化
  • 取り出す時にメールアドレスを復号化

暗号化・復号化自体はこちらの記事を参考にLaravelの機能を使って簡単にできた。 【Laravel 5.4】モデルのフィールドの暗号化・復号化

課題

参考記事内でも言及されているが暗号化した際の値が毎回変わるのでバリデーション時に一致せず、同じメールアドレスで複数のアカウントを登録できる状態になってしまった。参考記事では自作クラスを作成して解決されたようだが、私の場合は引き継ぎを前提とした開発だったので、なるべく認証周りに大きな変更を加えたり自前で何かを作ることはせずにlaravelの標準的な機能で完結させたかった。

対応

メールアドレスをsha256でハッシュ化した値を格納するカラムを別で作成して、それを登録時やログイン時のチェックに使用することにした。

/app/Http/Controllers/Auth/RegisterController.php

    protected function validator(array $data)
    {
        $data['encrypted_email'] = hash('sha256', $data['email']);
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'encrypted_email' => 'required|string|unique:users',
        ]);
    }

登録時はencrypted_emailのバリデーションを追加している。

/app/Http/Controllers/Auth/LoginController.php

use Illuminate\Http\Request;

class LoginController extends Controller
{
    (省略)

    protected function credentials(Request $request)
    {
        return ['encrypted_email' => hash('sha256', $request->email), 'password' => $request->password];
    }
}

ログイン時は認証キーをencrypted_emailに変更している。あとはメールアドレスを更新した際にencrypted_emailのカラムも同時に更新するなど細かい修正を加えている。

参考

フリーランスエンジニアが2018年に買ってよかったもの

フリーランスエンジニアが2018年に買ってよかった物のまとめです。

サンラメラ ヒーター

長時間座っているためかここ数年冬場になると足の神経痛に悩まされていたのですが、サンラメラを導入してからあまりそれを意識しなくなりました。静音(無音に近い)で乾燥せず部屋の底冷え感も解消されたので個人的に大満足の商品でした。自宅作業で部屋の底冷えに悩んでいる人がいたらおすすめできます。温かさはじんわり系で日光やサウナに近い感覚です。

人感センサー電球

玄関に付けています。家を出る時や帰ってきた時に自動で点灯して少し経つと勝手に消灯します。ちょっとしたことですが、これがあるとないとでは生活の質がだいぶ変わります。パナソニックアイリスオーヤマの電球を両方購入しましたが、パナソニックのほうが細かい動きに反応する気がします。

ティファール フライパン

よくあるコメントになってしまいますが、くっつかず洗いやすく手入れが楽です。

ブッククリップ

コーディングで本を開きっぱなしにしたい時に使っています。これまで適当なものをストッパー代わりに本の上に置いていたのですが、重さが足りなかったりバランスがずれたりで本が閉じて作業が中断してしまうことがありました。ブッククリップを検討してからいくつか比較して、使い勝手の良さそうなこちらの商品を選びました。

プラムネット ブッククリップ

プラムネット ブッククリップ

アーロンチェア

これまでの椅子では2~3時間座っていると腰に痛みがきていたのですが、アーロンチェアに変えてから座れる時間が伸びて痛みの強さも減りました。高額の買い物なので購入に決心は必要でしたが買ってよかった品です。保証期間が12年ありサポートが手厚いことも購入を決めたポイントです。大塚家具でセールのタイミングと重なり15万円台で購入できました。

ブロックチェーンアプリケーション開発の教科書

自分の開発でブロックチェーンを使う機会はなかったのですが、ブロックチェーンの仕組みや周辺環境を学ぶことは海外旅行の異文化体験のように学びが大きいものでした。直近の案件ではスマートコントラクトの概念を参考にするなど多少なり勉強したことを活かせています。

ブロックチェーンアプリケーション開発の教科書

ブロックチェーンアプリケーション開発の教科書

まとめ

2018年の買ってよかったものを振り返ると長年抱えていた健康の問題を多く解消できた気がしています。一方で、価格の割に使用回数が少なかったなど反省点のある買い物も結構な額でありました(主に機材周り)。作業へのノイズや負荷を下げるための買い物が成功しやすい傾向にあるので、来年はそのあたりを意識しながら調整してみたいと思います。