追記

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。HTTPS化したいとは思っているんです…

OSS活動をご支援いただける方を募集しています


2020-05-19 ruby-buildのバージョンリスト表示を整理した [長年日記]

ruby-buildのバージョンリスト表示を整理した

すでにお気づきの方もいるかもしれませんが、昨日リリースされた ruby-build v20200518 では rbenv version -l で表示されるインストール可能なRubyバージョンのリストが大きく整理しされ、短くなりました。

これは私が2020年に入って取り組んでいたもので、多くの人にとって使い勝手の向上となる変更であると信じています。ここでは、当該機能を実装したプルリクエスト rbenv/ruby-build#1402 で改善した内容を解説します。

改善したこと: rbenv install -l の出力を整理した

ruby-build v20200518 以降では、rbenv install -l で出力されるバージョンのリストが以下のように大変スッキリした短いものになりました。以下のようなルールで、現在サポートされている系列の最新バージョンが表示されます。

  • MRIはセキュリティメンテナンス期間を含むサポート中の各マイナーリリースの最新を表示
  • それ以外のRuby実装は最新バージョンのみ表示
$ rbenv install -l
2.5.8
2.6.6
2.7.1
jruby-9.2.11.1
maglev-1.0.0
mruby-2.1.0
rbx-4.15
truffleruby-20.0.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all' to show all local versions.

最後の3行は標準エラー出力へ出力されているので、実質的なリスト部分は8行です。

上記のリストに表示されていないバージョンも、非表示になっているだけでインストールは可能です。

$ rbenv install 2.7.0

背景: rbenv install -l 長すぎ問題

本機能を実装するに至った背景を解説します。

従来のruby-buildでは、ruby-buildを使ってインストールできるすべてのバージョンのRubyを表示していました。

$ rbenv install -l | head -n 5 
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
(中略)
truffleruby-19.2.0.1
truffleruby-19.3.0
truffleruby-19.3.0.2
truffleruby-19.3.1
truffleruby-20.0.0

過去のすべてのバージョンが含まれるリストは大変長くなっていて、2020年5月19日現在で489行にもなります。

$ rbenv install -l | wc -l
     489

このため、多くの人はruby-buildでインストールできるRubyのリストを、lessに渡すか、ターミナルをスクロールバックする等して、500行弱のリストからインストールしたい目的のバージョンを探していたのではないでしょうか。

あるいは、リストを見ずに rbenv install 2.7.1 などと実行して、該当するバージョンがなければruby-buildのアップデートをするという方もいるかもしれません。

rbenv install -l で表示されているリストが過去のすべてのバージョンを含んでいることにより、以下のような問題がありました。

  • 多くの人は最新あるいは少し前のバージョンのRubyしかインストールしない
  • ほとんどの人によって必要とされていないバージョンがリストの大部分を占めている
  • 必要なバージョンを見るためにスクロールが必要で煩わしい
  • バージョンのリストは将来にわたって際限なく増え続ける

ruby-buildでインストールできるRubyのバージョンが、50や100だった頃はすべてのバージョンを表示していてもよかったのですが、500近くになっている現在では整理が必要ではないかという提案を行いました。

互換性への配慮

ruby-buildをバージョンアップして突然 rbenv install -l の出力が短くなっているとびっくりするでしょうから、サポート中のリリースのみを表示している旨のメッセージを表示するようにしました。また、メッセージはリストを machine readable に保つため標準エラー出力へ出力しリスト自体と混ざらないようにしています。


Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all' to show all local versions.

過去のバージョンを含んだすべてのバージョンを表示したい場合は rbenv install --list-all というオプションで実行します。大文字の -L というオプションはエイリアスです。

$ rbenv install --list-all / -L

1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
(中略)

ruby-build コマンドはrbenv installよりスクリプトの中でとして実行されることが多いため、こちらの動作は変更せず --list オプションを追加してサポート中のバージョンのみを表示するようにしました。

まとめ

ruby-build v20200518 では、以下のようにコマンドの仕様が変更されています。毎回 less を挟んだりスクロールするという手間がなくなり、多くの人の「ひと手間」を削減する改善となっているはずです。

コマンド オプション バージョンリスト 仕様変更 新規追加
rbenv install -l / --list サポート中のみ
rbenv install -L / --list-all すべて
ruby-build --definitions すべて
ruby-build -l / --list サポート中のみ

現状MRI以外のRuby実装はマイナーリリースを考慮せず、最新バージョンのみを表示するという実装となっていますが、これは「とりあえずこれでいいだろう」とコミュティティで合意したものです。しかし、強い理由があって決まったものではないので、マイナーリリースまで表示してほしいという要望があれば更に改善の余地はあります。


2020-04-29 リトルカブシート張替 [長年日記]

リトルカブシート張替 @27100km

シートを張替えました。吸盤も終わっていたので、合わせて交換しました。シートはNTBの張り替え用カバーにしました。交換時の走行距離は27100kmくらい。

まずはシートを剥がして、シートベースを洗浄しました。洗浄は食器用洗剤のジョイできれいにしました。

吸盤もついでに交換します。品番は77211-GBJ-830ですが、1個入りの品番なので2個注文する必要があります。古い吸盤を外すときは、シートを分解して裏側からカットすると簡単です。逆に取り付けるときは、シリコンスプレーなどを塗って滑りやすくして力でゴリ押しして押し込みます。

途中をすっ飛ばしますが、タッカーで新しいシートを打ち込んで完成です。上下左右を先に留め、少しずつ伸ばしながら間を埋めるように打ち込んでいくのがポイントです。詳しくはYouTubeに説明動画が多くあるのでそちらを参照するといいと思います。

ついでにサイドカバーのステッカー跡をきれいに剥がしました。

新型コロナウィルスの影響による在宅勤務中のレストアもだいぶ仕上がってきました。みすぼらしかった外見もかなりきれいになりました。

今回の使用パーツ


2020-04-27 [長年日記]

FreeBSD ports 作成: sysutils/mackerel-agent

はてなの提供するサーバリソース監視サービス Mackerel.io のエージェントである mackerel-agent のFreeBSD portsを作成しました。

もともと非公式ながらFreeBSDに対応しているので、素直に作成するだけ。rc scriptは少々手直ししました。

一応インストール方法や使い方を解説しておきます。quarterlyには入れていないので、pkg install できるようになるのは2020年7月以降になります。それまではportsからインストールしてください。

# portmaster -d sysutils/mackerel-agent

or

# make -C /usr/ports/sysutils/mackerel-agent install clean

インストールできたら、/usr/local/etc/mackerel-agent/mackerel-agent.conf を編集してAPIキーを追加します。

$ sudoedit /usr/local/etc/mackerel-agent/mackerel-agent.conf

以下の行にAPIキーを書いておきます。最低限の初期設定はこれだけ。 apikey = "WRITE_API_KEY_HERE"

サービスを有効にして、

# sysrc mackerel_agent_enable=YES
mackerel_agent_enable:  -> yes

サービスを起動する。

# service mackerel_agent start

ログはsyslogに出るようになっています。

# tail -f /var/log/messages
Apr 22 18:22:09 icepick mackerel-agent[76166]: 2020/04/22 18:22:09 main.go:174: INFO <main> Starting mackerel-agent version:0.67.1, rev:, apibase:https://api.mackerelio.com
Apr 22 18:22:20 icepick mackerel-agent[76166]: 2020/04/22 18:22:20 command.go:735: INFO <command> Start: apibase = https://api.mackerelio.com, hostName = example.vmeta.jp, hostID = HOSTIDHOSTID

しばらくすると、mackerel.io のコンソールにメトリクスが表示されているはずです。

GitHub Sponsors

GitHub Sponsors プログラムに参加し、無事に承認されました。ご支援いただけるとうれしいです。


2020-04-18 リトルカブタイヤ交換など @26900km [長年日記]

リトルカブタイヤ交換など @26900km

ここ最近カブの記事が続きますが、コロナウィルスの影響を受けた世の中により、例に漏れず在宅勤務になっています。よって、しばらくカブでの通勤もないので、日曜日の夜までに元通りにしないといけないというスケジュールに追われることなく、あちこちバラしたり直したり、レストアを進めています。

今回はタイヤ交換。左が古いの、右が新しいのです。メーカーはIRC。交換歴は不明ですが、たぶん新車から無交換なのではないかと思います。もし無交換であれば、15年27000kmほど走行した、使い古したタイヤがツイていたことになります(古いタイヤの製造年を見るのを忘れていた!)。

2週間前に交換したいと言っていたやつですね。タイヤ交換は自分でやってできないことはないと思いますが、廃タイヤの処理など面倒くさいのでお店でやってもらいました。部品代+工賃合計で8000円でした。安くはないですが、高くもなく、こんなもんかな?

交換後はしっかりグリップするようになりました。ニュータイヤ気持ちいい。使い古しのタイヤは、乾燥路面で赤信号でのブレーキでも、ちょっと強めに制動をかけるとロックするほどでした。

他にもいろいろレストアしていて、リアキャリアをヤフオクでゲットしたスーパーカブ用に交換したり。裏側の黒い部分はサビ落としして、シャシーブラックを塗ってます。

エアクリーナーもおそらく無交換だったので、交換。ご機嫌な吸気音になって、少しパワーも回復した気がします。シート裏の吸盤も部品は購入していますが、これは後日交換します。

あとは純正色スプレーで塗装ハゲのひどい部分や、盗難にあったときに缶スプレーでいたずらされて汚くなっていた部分を塗装したり。

あまりにも見た目がひどい部分だけをちょいちょいっと塗るだけのつもりが「この部品を外せばもうちょっと奥まで塗れるな」と次から次へと塗りたくなってしまって、塗ると残された汚い部分が気になる…沼にハマりました。

マフラーステーもやっつけシャーシブラック。ざらつきは気にしない。

だいぶきれいになりました。あとは、サイドカバー・シート張替えをすればだいぶ見栄えがよくなりそうです。リアウィンカーをワレンズにもしたい。

まとめ: 今日やったこと @26900km

  • リアタイヤ交換
  • リアキャリアをスーパーカブ用に交換 (サビ落とし・シャーシブラック塗装)
  • エアクリーナ交換
  • 純正色スプレー塗装
  • マフラーステーシャーシブラック塗装

書き忘れていましたが、フロントのステムカバーもヤフオクで買ったパーツを取り付けて復活しています。

記事中に登場したパーツ


2020-04-13 リトルカブ燃料キャップキーレス化&パッキン交換 [長年日記]

リトルカブ燃料キャップキーレス化&パッキン交換

うちのリトルカブの燃料キャップは盗難に遭ったときにキャップがない状態で戻ってきていて、中古部品を購入してつけているのですが、 キャップだけ鍵が違うという不便な状態です。

キャップだけ違う鍵で開閉するのも面倒この際キーレス化することにしました。

2本のネジを外して分解します。 ↑これがロックしている状態。 ↑これがロック解除状態。

キーレス化するには、この部品を外して組み直すだけ。

ついでにカチカチでプラスチックのようになっていたパッキンも交換しました。右が新しいもの。


2020-04-04 リトルカブオイル交換 @26825km [長年日記]

リトルカブオイル交換 @26825km

いつものように。アンダーカバーを外してドレンボルトにアクセスするのが面倒だったのと、ドレンワッシャの予備も持ち合わせがなかったので今回は上抜き。

って前回と同じ書き出しですね。ちょうど1年くらい。前回交換時の距離が25440kmだったので、差し引き1385kmです。

オイルポイパックも2.5Lを去年購入して、カブのオイル量では1回では使い切れないので、今回の分と合わせて1年越しに廃油を捨てました。容量的にはもう1回行けたかも知れないけど、流石にこれ以上廃油を家においたままにするのは気が引けるので燃えるゴミに出しました。

オイルはいつものホンダ ウルトラG1ですが、メーカー不明の4ストバイク用オイル(10W-40)も死蔵していたので、フラッシングがてら一度入れてからG1を入れました。

今回も上抜きなのでドレンパッキンは交換しませんでしたが、交換する場合はPIAAの日産車用が同じ20mm×12mmサイズです。

手元にも買ったまま使っていない日産用のドレンパッキンがあります。オイル交換は自分でやっていて、前回下抜きしたときはこれに交換してあるはず。

リアタイヤがすり減っているのと、固くなってひび割れているのでこれもそろそろ替えたいところ…。前ブログに書いていた前後ニュータイヤというのは間違いで、チューブは前後新品ですが、リアタイヤは交換していなかった。


2020-02-23 リトルカブチェーン交換 @26704km [長年日記]

リトルカブチェーン交換 @26704km

チェーン交換しました。完全についでです。ついでというのは、タイヤの空気圧をチェックするのが面倒なのでエアチェックバルブをモノタロウで購入したのですが、3500円以上の買い物で送料無料になるため、金額調整のためになにか買おうと思って買ったのがチェーンでした。

このカブは中古で譲ってもらったものなので、整備歴はよくわかりませんが、状態から見て交換時の26704kmまで無交換だったように思います。

エアチェックバルブはスプリットファイアの物を購入しました。対応空気圧ごとにいくつか品番があるので注意が必要です。リトルカブは前輪が1.75kg/cm2、後輪が2.00kg/cm2なので、それに合ったNNW-AC001とNNW-AC002を購入しました。

さらに金額調整のために、紛失していたチェーン点検口のキャップ、左右のミラーも同時購入。

購入パーツ

チェーンはリンク先のものがリトルカブ用ですが、3速と4速でコマ数が違うので購入の際はご注意ください。

まずはチェーンケースの取り外し。

チェーンケースを外した写真

チェーン点検口のキャップがなくなってしまっていて、穴が空いたままになっていたせいか、特に下側のケースに砂が溜まっていて、砂がグリスの油脂分で固まっているというとても汚い状態だったのできれいに洗浄しました。これが一番時間かかった。いくつかサビが浮いている部分が合ったので、その部分もきっちりサビ止め。

チェーンケースを洗うのに小一時間かかってしまいましたが、次にチェーンのクリップを外して新しいチェーンと接続します。写真を取るのを忘れてましたが、スプロケットもチェーンを外したこのタイミングでパーツクリーナーで清掃しておきます。

新しいチェーンをつないだら、ぐるっと一周回して切れ目の古いチェーンを外して、新しいチェーンの両端を接続します。チェーンを接続するときは古いチェーンが伸びていて、新しいチェーンが届かないかもしれないので、後輪を調整して前に出しておきます。

写真右端に見えているのは今回購入したエアチェックバルブです。

チェーン交換はこれでおしまい。最後にチェーンの張りを調整して、リアブレーキのワイヤの調整をして作業完了です。

チェーン交換後に走行してみると、スムーズになっているのが実感できました。古いチェーンは動きが悪くなっていてかなりパワーが喰われていたようです。50ccのパワーがない車両だと、少しの調整で走りが大きく変わりますね。

作業の工程はかなり端折って書いてあるので、細かい部分はスーパーカブパーフェクトメンテや他の書籍等を参照してください。