HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

GitでSSH経由なのにパスワード聞かれる問題で登場するssh-agentについて

はじめに

GitでSSH経由なのにパスワードが聞かれる場合、ssh-agentの話が出てますが、それについて詳細に掘り下げた記事になります。

これをするくらいなら、HTTPSで接続してキャッシュしてもいい気もします。

やり方、使い方

# sshエージェントを起動する(子プロセス立ち上げ)
ssh-agent bash

# こちらでも可(現在のシェルで実行させる)
eval `ssh-agent`
 
# ssh-agentに鍵を登録
ssh-add  [鍵のパス]

# ssh-agent をkillする場合は…
ssh-agent -k

ssh-add以降は、この鍵を使用するSSH接続について、パスワードを聞かれることはなくなります。

ssh-agent について

ssh-agent とは

マニュアルを見るのが一番ですね。

man ssh-agent

日本語訳はこちら。

nxmnpg.lemoda.net

ssh-agent はOpenSSHの認証エージェントです。

ssh-agent is a program to hold private keys used for public key authentication. Through use of environment variables the agent can be located and automatically used for authentication when logging in to other machines using ssh(1).

ssh-agentは公開鍵認証に使われる秘密鍵を保持するプログラムです。
環境変数を使うことでエージェントの場所を特定し、sshを使ったログイン時に自動的に使用されます。(意訳)

書いてあるとおりですが…
起動後最初にssh-add秘密鍵のパスワードを入力することで、以後入力無しでSSH接続が可能になります。

起動方法は2つ

ssh-agent bash のようにシェルを指定することで子プロセスとして立ち上げるか、eval を介して現在のシェルで実行するか、です。
ssh-agent 単発でも起動できますが、その際は自分で標準出力された環境変数を設定してあげないと、利用ができません。

最後に

毎回コマンド実行するのは大変なので、シェルの起動時に仕込むのもありですね。
以上でした!

ログファイルのローテート処理をbashで書いた

はじめに

環境(職場)が変わる毎に書いている気がするログのローテート処理。
今回はメモしておくことにしました。

logrotate が使えるのなら、自作よりもそのほうが良いと思います。

中身

#!/bin/bash

########################################
# ログファイルのローテート処理を行います
# 前提:
# - yyyymmddがファイル名の頭につくこと
# - gzipを使えること
# - 圧縮したファイルはold/に放り込む
########################################

# 名前の定義
LOG_DIR="/path/to/logs"
OLD_LOG_DIR=${LOG_DIR}/old

today=`date +%Y%m%d`
LOG_FILE_NAME=${LOG_DIR}/${today}.log

if [ ! -d ${OLD_LOG_DIR} ]; then
    mkdir ${OLD_LOG_DIR}
fi

# ログディレクトリ内を漁る
# 古い日付のファイルに対して、圧縮と移動を行う
fileList=($(ls ${LOG_DIR}))
for fileName in ${fileList[@]}; do
    if [ -f ${LOG_DIR}/${fileName} -a $((${today} - ${fileName:0:8})) -gt 0 ]; then
        gzip ${LOG_DIR}/${fileName}
        mv -f ${LOG_DIR}/${fileName}.gz ${OLD_LOG_DIR}/
        echo "gzipped and move the file: "${fileName}
    fi
done

# ログが何もなくともtailできるように空ファイル作成
if [ ! -f ${LOG_FILE_NAME} ]; then
    touch ${LOG_FILE_NAME}
fi

見慣れなさそうな処理の解説

fileList=($(ls ${LOG_DIR}))

bashの配列はカッコ()でくくられており、中身は半角スペース空きなので、
上記でとあるディレクトリ配下にあるファイル名の配列を作成できます。
$()でカッコ内のコマンドを実行できます。

${fileList[@]}

配列を展開することができます。

fruits=(apple orange banana)
echo ${fruits[@]}

# 出力:
# apple orange banana

こちらの記事でも書きました。
https://hrroct.hatenablog.com/entry/2017/02/10/112808

${fileName:0:8}

変数展開と呼ばれるもので、

${parameter:offset:length}

という並びです。
${fileName:0:8}なら、ファイル名を頭から8文字でカットして返してくれます。

(Markdown記法にひっかかって書けなかった)

$((${today} - ${fileName:0:8}))は算術式です。
$((...))で囲むことで、計算が可能になります。
(今日の日付 - 対象ファイルの日付)

終わりに

ログローテート処理を書かなくとも、bashの書き方の参考になれば幸いです。
以上でした!

Kailh Boxのテスターを買ったのでレビュー

はじめに

Kailh Boxのテスターを買ったので、レビューというか詳細です。 Amazonで買ったものの、あまり商品自体の情報がなかったので。

www.amazon.co.jp
アフィリエイトのリンクではありません。

キースイッチの情報は下記を参照しています。

shop.yushakobo.jp

input.club

開封

f:id:hrroct:20210521222048j:plain

ある程度組み立てられていると思いきや、バラバラで到着でした。

f:id:hrroct:20210521221808j:plain

各スイッチと、アクリル板、取り外しツールがついてました。

f:id:hrroct:20210521222209j:plain

何となく近しいものを集めた図です。
これを元に、何が何なのかを説明していこうと思います。

ついてくるキースイッチについて

f:id:hrroct:20210521222209j:plain

上段左から、 白軸、Pale Blue、Jade、Navy、Burnt Orange、Royal、Hako Royal Clear。

下段左から、 赤軸、黒軸、Dark Yellow、茶軸、Hako Clear、Hako True、Hako Violet。

キースイッチ詳細

下記は共通ですので、各キーのところでは記載しません。

項目 数値
ストローク 3.6mm±0.3mm
接点 1.8mm±0.3mm

リニア

何のとっかかりもない、シンプルな軸。

赤軸

リニア軸代表。最初のメカニカルは赤軸でいいのでは、と個人的に思ってます。
ちなみに私はNizの静電容量方式のキーボードを使っていますが、赤軸のほうが重く感じます。

項目 数値
押下圧 約45g±10gf
黒軸

赤軸を重くした軸。コピペを繰り返すと辛くなってくる重さ。
打鍵力?が強い人も使いがちですが、負けじと押して結果底打ちしてる人多数いる説。
本当は撫でるように使えるとよいのかも。

項目 数値
押下圧 約60g±10gf
Dark Yellow

黒軸よりもさらに重い軸。
黒軸でも底打ちしてしまう人に対抗しているんだろうか…。

項目 数値
押下圧 約70g±10gf

タクタイル

このテスターでは一番種類が豊富でした(7種類)。
見分けがつかないんじゃ…と思いますが、実際に触ってみると違う不思議。

茶軸

タクタイル代表選手たる茶軸。メカニカルならまずこれを勧められるケースが多そう。
動作圧のほうが強いので、最初の抵抗を抜けたらストンといく感じ。

項目 数値
押下圧 約45g±10gf
動作圧 約60g±10gf
Input Club Hako Clear

HaloのBOX版がこのシリーズらしい。詳細は知りませぬ…。
動作圧のほうが小さいせいか、リニア軸、黒軸に近いタクタイルという印象を受けました。
単純比較もできませんが、茶軸よりも重い感じ。

項目 数値
押下圧 約63gf
動作圧 約55gf
Input Club Hako True

Trueと言われても色がわからぬ…。
「Pink Salt(ピンク塩、岩塩の色?)」らしいです。サーモンピンクだと思ってました。
Clear軸よりもタクタイル感が少なく感じるので、より黒軸に近い印象です。

項目 数値
押下圧 約58gf
動作圧 約60gf
Input Club Hako Violet

Violetは青系の紫だそうです。
茶軸を軽くした感じなので、茶軸よりも最初に触る軸として向いているのでは…?と思いますが、打鍵力?の強い方には微妙かもしれません。

項目 数値
押下圧 約39gf
動作圧 約28gf
Burnt Orange

「NovelKeys x Kaihua Box Heavy Burnt Orange」が正式名称。バーントオレンジ、濃いオレンジ色のようです。
比べるべくはHako Trueだと思うのですが…押し比べた感じ、こちらのほうが軽い感触なのはなぜ…。
タクタイル感は近しいかなと思います。

項目 数値
押下圧 約70g±10gf
動作圧 約60g±10gf
NovelKeys Box Royal

色はPurple(赤系の紫)らしいです。Royalではなくて色で呼んでほしい…。
押下圧と動作圧の差があるせいか、タクタイル感を強く感じます。
押下圧が強いので、押し込まずにタクタイル感を感じて止められたらいいのかなぁと思いました。

項目 数値
押下圧 約75±10gf
動作圧 約45±10gf
Hako Royal Clear

一つだけ、底面が黒かったナゾのスイッチ。
Hako RoyalにはTrue(Pink Slatのやつ)もあるようなので、このメンバーからは抜け落ちてしまった様子。
Royal Clearは動作圧が大きいだけあって、最初のタクタイルが重い。疲れそうだな…という印象。

項目 数値
押下圧 約50±15gf
動作圧 約85±10gf

クリッキー

カチカチ楽しいクリッキー。おそらく家でしか使えない。

白軸

Cherry MXだと青軸ですが、Kailh Boxでは白軸がベーシックなポジション。
押下圧のほうが小さいので、カチッといったあとはスッといく感触。

項目 数値
押下圧 約45g±10gf
動作圧 約55g±10gf
Pale Blue

今回出てくるものの中では、唯一押下圧のほうが強いスイッチ。
押し込む過程で、カチッといいながらしっかり重い。
底打ちしてると疲れそうな印象。

項目 数値
押下圧 約70g±10gf
動作圧 約60g±10gf
Jade

「NovelKeys x Kailh BOX Thick Clicks」が正式名称。「Jade」は翡翠という意味。
白軸を重くした感じですが、カチッという音も重いです。

項目 数値
押下圧 約50±15gf
動作圧 約75±15gf
Navy

「NovelKeys x Kailh BOX Thick Clicks」が正式名称。
Jadeをさらに重くしたもので、音はJadeよりもさらに重め。
動作圧の数値を見てもわかるように、これは重い…。キーボード以外の用途にしたほうがよいのでは…。

項目 数値
押下圧 約65±15gf
動作圧 約95±15gf

終わりに

分割キーボードの自作を考えていて、試しにテスターを買ってみたのが始まりでした。
クリッキーなど、押してるだけでも楽しいものです。

最後にアフィリエイトのリンクを貼っておきます(コッソリ)。
以上でした!

CygwinでGo言語をお試し

はじめに

Go言語をCygwinベースで実行できるようにします。
参考にしたのは公式サイトです。

golang.org

ドキュメントページにGetting startedとあるので、これに沿っていきます。

golang.org

Getting started

Installing Go

TOPページから、Windowsの場合はmsiファイルがダウンロードできるので、まずはインストールしましょう。

Goのインストール場所はデフォルトで C:\Program Files\Go\bin\go.exe こちらなので、/usr/local/bin/ あたりにシムリンクを作成しておきます。
(gofmtもついでに。gofmtの詳細はこの記事に出てきません。)

$ cd /usr/local/bin/
$ ln -s /cygdrive/c/Program\ Files/Go/bin/go go
$ ln -s /cygdrive/c/Program\ Files/Go/bin/gofmt gofmt
$ go version
go version go1.16.2 windows/amd64

Write some code

あとは手順どおり。
適当なディレクトリに移動して、作業ディレクトリを作成します。

mkdir hello
cd hello

次に、コードの依存関係のトラッキングを有効にします。
なんのこっちゃですが、これを行うことで依存モジュールの管理(自動検知やバージョンの固定、新バージョンの検知など)ができます。

今回はexample.com/helloですが、通常はgithub.com/mymoduleなど、ソースコードが保存されるリポジトリの場所になるとのこと。

$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello

表示の通り、go.modというファイルが作成されます。
次に、hello.goという名前でファイルを作り、中身を下記のようにします。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

最後に、下記コマンドを打つことで実行できます。

$ go run .
Hello, World!

Call code in an external package

もう少しパッケージの話が続きます。
誰かが作ってそうなコードについては、探してそれを使うことも可能です。 ここの例では、下記を使ってみる流れになります。
pithy sayings(格言、ですかね)を返すだけのモジュールです。

pkg.go.dev

hello.goを編集して、下記のようにしてみます。

package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}

手順にはありませんが、このまま実行しようとすると怒られます。

$ go run .
hello.go:5:8: no required module provides package rsc.io/quote; to add it:
        go get rsc.io/quote

go getしろやと言われますが、今回は手順に沿ってgo modで解決します。
go help mod tidyするとわかりますが、必要なモジュールの追加と不要なモジュールの削除をやってくれます。

$ go mod tidy
go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

rsc.io/sampler も取り込んでますが、これはrsc.io/quote 内で使用しているからです。
ソースコードを見るとわかります。
https://pkg.go.dev/rsc.io/quote

また、go.sumファイルができあがってますが、これはチェックサムのsumですね。ファイルの中身を見てみるとわかります。

$ ls
go.mod*  go.sum*  hello.go

最後に、ファイルを実行すると…

$ go run .
Don't communicate by sharing memory, share memory by communicating.

外部パッケージの機能を使って、無事に文字列を出力することができました。

Write more code

もっとコードを書きたい方は…ということで、リンク先が紹介されています。
興味ある方はぜひ。

golang.org

終わりに

Cygwinで構築、だけでなく流れでチュートリアルの最初までやっちゃいましたが…
何となく雰囲気だけでもつかめるとよいかなと思いました。

以上でした!

Gitでパッチファイルを使う

はじめに

Linuxとしてpatchファイルを扱うことができますが、Gitの機能を使うとより便利だったり安全だったりしますよ、という話です。
※commitの差分を扱うformat-patchコマンドは、今回扱いません。

参考文献:
git-scm.com

やり方

git diffでパッチファイルを作成して、git applyで適用しようというお話です。

patchファイルの作成

git diff > YYYYMMDD_foobar.patch

patchファイルの適用

git apply YYYYMMDD_foobar.patch

使いどころ

  1. git stash の簡易版
    commitするのは躊躇われますが、自分の環境には適用したいものとか(そんなにあるかな)。
  2. 他の作業者に渡す
    差分を例えばSlackなんかにコピペしたら、それを適用してもらうのが簡単になる。あまり出番はないですけど。

終わりに

あまりぱっとしない使い道のような気もしますが…
何かの折に思い出して使ってみてください。

以上でした!