2020年買って良かったもの

はじめに

この記事は2020年ふりかえりアドベントカレンダー 13日目です。昨日の記事は Rails Girls Gathering Japanに参加 - いまブログ です。

こんにちは。趣味は買い物の ima1zumi です。2020年もそろそろ終わりが近いので、買って良かったものリストでもつくってみようと思います。「これ悪くはないけどもうちょっと考えて買ったほうが良かったな」と思っているやつも紹介しようと思っていたのですが、思ったより記事が長くなってしまったのでそちらについては気が向いたら書きます。

軽く前提

2020年は働いておらず、ずっと家でプログラミングスクール(FJORD BOOT CAMP)の学習をしていました。ほとんどの時間を画面の前で過ごしています。

買ってよかったもの

購入して良かった!これがない生活には戻りたくない!と思っているものたちです。

1. トラベラーズノート レギュラーサイズ

www.tfa-onlineshop.com

手帳探しの果てにたどり着いた相棒(のはず)です。2020年10月頃から使用中。

私は万年筆ユーザーで文字を書くことが好きなので、紙の手帳はずっと使っています。スタンダードなタイプの手帳は大体試しました。その結果月間ブロックタイプ、週間レフトタイプ、週間バーチカルタイプ、1日1ページタイプで予定を管理することには合わないということが分かっています。また、月間ブロックで予定を管理すると Google カレンダーとの二重管理になり予定管理が崩壊するので、月間ブロックは予定管理用として使わないことにしました。

これまでの使用感として、週間ブロックタイプ、変形週間ブロックタイプ、1日2ページタイプ(フランクリンプランナー)はわりと良かったので、自分にとって書くスペースが広い方がいいということが分かっています。しかし1日に書くスペースが限られていると、時々めちゃくちゃ書きたくなったときに「続きはこちらのメモページへ…」となりページが飛び飛びになるのが不満でした。

メインの筆記具が万年筆で、かつ文字が大きめ(5mm方眼には収まらない)なので、手帳自体の大きさはバイブルサイズ以上必要だということも分かりました。また、トモエリバーやthin paperといった手帳向けの薄い紙は書き心地がそれほどよくないので、あまり好みではありませんでした。手帳本体の薄さは求めておらず、できれば MDノート や ニーモシネ や ノーブルノートの紙 といった厚めの紙を使いたいという気持ちもありました。

去年「手帳に予定管理機能を求めてないんだからMDノートでバレットジャーナルにすればよくね?」と思いMDノート(A5・無地)も使っていたのですが、なぜだかしっくりこなかったんですよね…おそらく無地で日付がないと自分にとっては逆に書きにくいと分かりました。しかも手で日付を書くのは嫌でした。日付を書きたくないくらいなので、バレットジャーナルも続きませんでした。

2020年10月頃に来年の手帳のことを考えていてネットの海を彷徨っていると、トラベラーズノートを見かけました。A5は大きすぎる、でもバイブルサイズ以上の大きさは欲しい、と思っていた自分にとってぴったりのサイズのように見えました。また、紙質もMDノートと同じ用紙ということで安心して使えることがわかりました。こういった細いタイプのノートを使ったことがないのでそこは少し不安でしたが、リフィルだけなら気軽にチャレンジできるのでとりあえずリフィル(日記タイプ)を買ってみることにしました。このリフィルはナンバリングしてあり1日1ページっぽく扱えるので、日付問題も解決できるだろうと思いとりあえず使い始めることにしました。

www.tfa-onlineshop.com

使ってみるとサイズがめちゃくちゃちょうど良かったんです!幅が狭く適度な地点で折り返せる、余白が目立たないのが書きやすいと分かりました。不満もなく使い続けられたので、カバーを買うことにしました。その際にメインのリフィルは日記タイプから方眼タイプにしました。方眼タイプの方が1ページに収まらない日も安心だからです。日付を手書きで書きたくないという問題は日付印を買うことで解決しました。

www.tfa-onlineshop.com

ちなみに、公式のトラベラーズノートのカバーは革です。革製品は好きなんですが、文具屋で見かける傷だらけのトラベラーズノートを見るとちょっとなぁ…と思って今まで手を出せずにいました。ですが東京駅限定モデルがかわいかったので、傷がつくデメリットを上回り購入する動機になりました。私が使っているトラベラーズノートも、傷は入っていますがデザインがかわいいのでヨシとしています。最近ちょっと乾燥が気になってきたので、ラナパーというレザートリートメントを塗りました。しっとりしてより可愛らしくなったと思います。

これが手帳探しの旅の果てになることを祈っています。

2. ディスプレイ

フリマアプリで DELL の 27 インチ 4K モニタを購入しました。3万円くらいでした。

特に問題なく使えています。画面が広いと何かと便利です。特に何かの資料を見ながら書物をするときには無いと困ります。画質にも満足しています。

最近もう1枚ディスプレイが欲しくなってきました。

3. トラックボール

私が購入したのはこちらですが、今は新しいモデルが出ているのでそちらでもよさそうです。

これを使う前は AppleMagic Mouse 2 を使っていました。mac ならではの便利モーションをたくさん発動できて便利だったのですが、いかんせんマウスの形状が薄いためよく手首が疲れてしまっていました。1日の終わりに手首を振って疲れを取ろうとする日が増えたため、手首に優しいというトラックボールを使い始めました。一瞬で慣れました。運命でした。トラックボールなしの生活には戻りたくありません。人差し指タイプとか別のタイプも気になっています。

個人的な難点は USB を1枠使うことです。 Magic Mouse は USB 枠を使わないのでよかったんですが…。使用している PC が macbook 12インチ なので USB type-C ポートが1枠しかなくてUSBは常に取り合いになっているのでつらいです。あと、縦横スクロールできるときに横スクロールする方法がわからなかったので2ボタンを横スクロールに当てました。

4. 薄い財布

superclassic.jp

電子マネー決済メインにしようと思って財布を薄くしました。自然とポイントカードが絞られ、いろいろスッキリしました。この財布以外にも薄い財布はいろいろあるので興味がある方は探してみればいいんじゃないかと思います。私は薄い財布のブッテーロレザーバージョンを使っているのですが、革の雰囲気も好みです。

難点はこの財布を使っているとときおりじっと見つめられることと、財布を開いたときにお札が丸見えになることです。小銭はあまり入らないので、極稀に小銭入れが閉まらなくなって困ることがありますが、意識的に小銭を消費していればそれほど困らなかったです。

5. ブラジェクのガラス爪やすり

私は自分の爪の形があまり好きではないんですが、twitter で「1年爪のメンテしてたらキレイな爪の形になったよ!」というツイートをみかけて私もそうなりたいと思って購入しました。すごく綺麗にやすりがけできます。一度使うと戻れなくなる。

乾いたまま使うと粉が散るので濡らして使ってます。

6. iwakiのダブルウォールグラス

寒い季節はコーヒーを淹れても一瞬でアイスコーヒーになってしまうのが嫌で購入しました。保温タンブラーはなんとなく好きじゃないのでダブルウォールにしてちょっとでもぬくもりをとどめておきたいと思い買いました。温かみを感じる温度で飲み切ることができ、満足しています。

ダブルウォールグラスは体積が大きくなりがちで持ちにくいので、取っ手があるととっても便利です。

これは食洗機対応ではありますが、ダブルウォールグラスは脆く食洗機にかけるのが怖いので手洗いしています。

7. グノーシア

グノーシア|オンラインコード版

グノーシア|オンラインコード版

  • 発売日: 2020/06/02
  • メディア: Software Download

やって良かったゲームです。本当に…。

実プレイ時間3日くらいで終わる軽めのゲームなので、年末年始にぜひ。

8. コスメデコルテのフェイスパウダー

10 misty beige を使っています。ちょいマットより。

これをはたくと自然に顔色がよくなり、自分の顔面の状態への満足度が高くなります。あと日焼け止め塗ったり汗かくような場所でのテカリ防止にもなります。

自然にトーンを上げてくれるので、ちゃんとメイクをするほどではないけどちょっと何かしたい日にぴったりです。手軽だし塗るたびに満足するのでお得な感じがします。他のフェイスパウダーに比べて高いのですが、粉がかなり多いのでそういう理由もあるのかなと思います。

www.cosmedecorte.com

9. キッチンペーパーホルダー

あるべきものがあるべき場所にあるのは幸福だということが分かりました。おおむね片手で切れます。

10. エビオス錠

飲んでいるとお腹の調子がいいので欠かせなくなりました。

おまけ

今年は自作キーボードキット Corne Cherry を買ったのですが、まだ組み立てていないので選考外にしています。楽しみです。

Rails Girls Gathering Japanに参加した感想

はじめに

この記事は2020年ふりかえりアドベントカレンダー 12日目です。昨日の記事は Rubyで文字コードを扱うコードを書くときに便利なメソッド集 - Qiita です。

Rails Girls Gathering Japan とは

Rails Girlsとはより多くの女性がプログラミングに親しみ、アイデアを形にできる技術を身につける手助けをするコミュニティです。 世界各国で開かれており、日本では Rails Girls Japan として各県で開催されています。

Rails Girls - Japanese

今回は Rails Girls Japanとして初めてのオンラインイベントとなる Rails Girls Gathering Japan が zoom で開催されました。「Rails Girls Effect」というテーマの LT 会でした。

Rails Girls Gathering Japan - railsgirls-japan | Doorkeeper

LTの感想

どれも素敵な発表でした! Rails Girls が素敵なコミュニティだということがよくわかりました。聞いているうちに「私もこれからやっていくぞ!」という元気をいただいて、参加してよかったなぁと思いました。 運営の皆様、登壇者の皆様、素敵な機会をいただきありがとうございました。

いくつかピックアップして感想を書きます。

『RailsGirlsが私にくれたもの』harukusさん

speakerdeck.com

この発表で特に印象に残っているのが、「コミュニティに居るだけでは参加しているとは言えないんじゃないか。フィヨルドブートキャンプのアプリでコミュニケーションをとったり、ミートアップで他の受講生と話したり、自分からアクションを起こすことがコミュニティに参加するということなんじゃないか」というところです。本当にそのとおりだと思います。

少し話は変わりますが、全てがオンラインで開催されるようになって、良くも悪くも「見るだけ」「聞くだけ」しやすくなったと思います。コロナ以前は、例えばフィヨルドブートキャンプのミートアップであれば立食での懇親会があり、その場にいれば否が応でも自分からアクションを起こす機会がありました。

それがオンラインのミートアップになると、アクションを起こさなくても結構その場に居られるというか、なにか話さなきゃ!話したい!と思うことは少なくなったように感じます。私のような人見知りにはそれは結構ありがたいと同時に、なんとなく全然喋らない状態になってしまうこともあります。話したくないわけではないんですが、腰が重くなってしまうというか。。オンラインはアクションを起こさなくても情報がたくさん届くため満足してしまいがちなのかな、と思います。

でも、そんなオンラインでも勇気を出してアクションを起こすと楽しいんです!分からないところを質問したり、雑談タイムで雑談したり、地域Rubyコミュニティで話したりLTしたりするのは楽しいことです。自分の考えが人に届いて、誰かが返答してくれるのは素敵なことだと思います。はるかすさんが意識的にアクションを起こしているのすごくいいなぁと思い、私もどんどんアクション起こしていくぞー!と思いました。

『これ好き!から始める世界』べこさん

speakerdeck.com

べこさんのこれ好き!楽しい!続けたい!が溢れててめちゃくちゃ良かったです。

始めることに年齢は関係ないし、長期的に見て続けていければいいんだし、やりたくなったら再開したらいいんだし、っていう言葉にすごく励まされました。

最近細く長くやっていきたいなぁと思っています。今はフィヨルドブートキャンプ生で時間があるのでやりたいことを楽しくできているのですが、働き始めると余裕がなくなりそうですこし不安に思っています。慣れない生活、分からないことがいっぱい、今までのように平日日中ゆったり学習はできない、となると自分はちょっと凹みそうだな、と心配していました。

ですが今日のべこさんのLTで、いっときお休みしても、再開したら続けていることと同じ!と聞いて、入社してしばらくは慣れることに精一杯でも、また慣れてきたらやりたいことやればいいじゃない〜ってちょっと落ち着いた気持ちになれました。続けていきたい気持ちを後押ししてくれるような元気をもらってとってもありがたかったです。ありがとうございます。

まとめ

とりあえずやっていきとして積んでいるキーボードを組んでいこうと思います!

reline のテストを実行

はじめに

この記事は2020年ふりかえりアドベントカレンダー 11日目です。これを書いているのは12月14日ですが、あまり気にしないことにしました。昨日の記事は サロゲートペアとRubyのStringについての覚書 - いまブログ です。

先日 Ruby の標準添付ライブラリの reline に PR を送って無事マージされました。

reline のテストについて教えていただいたので書き残しておきます。

reline の概要

reline は GNU readline を Ruby で再実装したライブラリです。 Ruby の標準添付ライブラリとして Ruby 同梱されています。

github.com

reline のテスト

rake testrake test_yamatanooroti で実行できます。

rake test

rake test を実行すると RakefileENCODING_LIST に定義されているエンコーディングでテストが実行されます。とても便利です。

❯ rake test

Test Encoding: Shift_JIS
Loaded suite -e
Started
...........................................................................................................................................
.............................................................................................................
Finished in 0.291866 seconds.
-------------------------------------------------------------------------------------------------------------------------------------------
248 tests, 2670 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
-------------------------------------------------------------------------------------------------------------------------------------------
849.71 tests/s, 9148.03 assertions/s

Test Encoding: EUC-JP
Loaded suite -e
Started
...........................................................................................................................................
.............................................................................................................
Finished in 0.256047 seconds.
-------------------------------------------------------------------------------------------------------------------------------------------
248 tests, 2670 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
-------------------------------------------------------------------------------------------------------------------------------------------
968.57 tests/s, 10427.77 assertions/s

Test Encoding: UTF-8
Loaded suite -e
Started
...........................................................................................................................................
...............................................................................................................
Finished in 0.232133 seconds.
-------------------------------------------------------------------------------------------------------------------------------------------
250 tests, 2710 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
-------------------------------------------------------------------------------------------------------------------------------------------
1076.97 tests/s, 11674.34 assertions/s

Test Encoding: Windows-31J
Loaded suite -e
Started
...........................................................................................................................................
.............................................................................................................
Finished in 0.235805 seconds.
-------------------------------------------------------------------------------------------------------------------------------------------
248 tests, 2670 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
-------------------------------------------------------------------------------------------------------------------------------------------
1051.72 tests/s, 11322.92 assertions/s

rake test_yamatanooroti

yamatanooroti というgemを使い、仮想端末上でテストを実行します。

github.com

yamatanooroti を使うには、 libvterm 、gem vterm をインストールします。

$ brew install libvterm
$ gem install vterm

rake test_yamatanooroti でテストを実行できます。

サロゲートペアとRubyのStringについての覚書

はじめに

この記事は2020年ふりかえりアドベントカレンダー 10日目です。これを書いているのは12月14日ですが、あまり気にしないことにしました。昨日の記事は .irbrc で irb で使える独自メソッドを定義する - いまブログ です。

TL;DL

サロゲートペアは16ビット固定長で FFFF 外の文字を表現するために生まれた文字の表現方法です。

サロゲートペアが問題になるのは UTF-16 だけの話です。UTF-8 等では可変長のためこの表現方法を取っておらず、問題になりません。

おことわり

私は Unicode の歴史的経緯がよくわかっていないので正しい理解でないかもしれません。ですが、折角書いたり聞いたりしたのでまとめておきます。何か気になる点があれば、コメント、 twitter 等で連絡いただけるとありがたいです!

あらまし

フィヨルドブートキャンプの Slack で、 String55296 という数値を << で追加すると見慣れぬエラーになるという投稿がありました。

s = ""
s << 55296
# Main.rb:2:in `<main>': invalid codepoint 0xD800 in UTF-8 (RangeError)

その後別の方が調査して 0xD800サロゲートペアのコードポイントであると分かりました。

そこでサロゲートペアとはなんだろうということで調べてまとめて、以下の文をフィヨルドブートキャンプの Slack に投稿しました。(一部投稿時から編集しています)

サロゲートペアとは

サロゲートペアは Unicode が16ビットでは足りなくなったために生まれた、上位サロゲートと下位サロゲートを組み合わせて1つの文字を表現するための方法です。UTF-16 で使われています。他の Unicode エンコーディングでは使われていません。

もともと Unicode は16ビットの 固定長 として誕生しました。16ビットなので、16進数で 0000 〜 FFFF の65536文字を格納できます。

しかし、世界中の文字を格納するには65536文字では足りないことが分かりました。

そこで既存の固定長を前提にしているシステムを壊さないようにしつつ文字をもっと格納するためにサロゲートペアという仕組みがとられました。

サロゲートペアは上位サロゲートと下位サロゲートから構成されています。例えば「𠮷」(吉ではなく、土に口がついている字)を見てみます。 「𠮷」のコードポイントは U+20BB7 です。

> "𠮷".unpack("U*").each { p _1.to_s(16) }
"20bb7"

「𠮷」は、上位サロゲートが「D842」下位サロゲートが「DFB7」のコードポイントで出来ています。コードポイントから上位サロゲート・下位サロゲートを計算する方法は wikipedia とかに載っているので興味があれば...

余談ですが、実は RubyString"\unnnn"または "\u{nnnnn}" でコードポイントから文字に変換する機能があります。(nは16進数の数値。{}つけないほうは4桁までしか入りません)

試しに先程の 55296 を 16進数 D800 に直して表示しようとしてみると、同じ invalid Unicode codepoint というエラーになります。

irb(main):030:0> 55296.to_s(16)
=> "d800"
irb(main):032:0> "\ud800"
Traceback (most recent call last):
        3: from /Users/mi/.rbenv/versions/2.7.1/bin/irb:23:in `<main>'
        2: from /Users/mi/.rbenv/versions/2.7.1/bin/irb:23:in `load'
        1: from /Users/mi/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/irb-1.2.7/exe/irb:11:in `<top (required)>'
SyntaxError ((irb):32: invalid Unicode codepoint)
"\ud800"
   ^~~~

もっと Ruby の String とエンコーディングの話

フィヨルドブートキャンプに投稿したバージョンでは、以下の文を入れていました。その後教えていただいて誤りがあると分かったので教えていただいた内容を簡単にまとめます。

上位サロゲート、下位サロゲートは1文字では文字として成り立たないため、s << 55296 のようにStringに挿入しようとすると「変なもの入れてますよ!!」とエラーがでるのだと思います。

"\uD800" とは何をしているのか

これは String オブジェクトを __ENCODING__ に指定されたエンコーディングで作成する処理です。

疑似変数 __ENCODING__スクリプトエンコーディングを持っており、最近の環境では UTF-8 が多いかと思います。

"あ" のように ' " で文字列をくくると RubyString オブジェクトを生成します。このとき、 疑似変数 __ENCODING__エンコードされた String オブジェクト を生成します。

エンコードするときに壊れた文字データが入っていた場合は例外を出します。このため、上位サロゲート文字の "\uD800" は1文字では文字として成り立たないためエラーになっていました。

やり方を変えて、String.new するときに encoding 情報を渡すとエンコードされないため例外になりません。RubyString に壊れた文字をもたせること自体は問題なく、 ""String オブジェクトを作成したときにエンコードが走り正しい値かチェックされていたことが原因で例外を吐いていたということが分かりました。

String.new("\xD8\x00", encoding: Encoding::UTF_8)
=> "\xD8\u0000"

.irbrc で irb で使える独自メソッドを定義する

はじめに

この記事は2020年ふりかえりアドベントカレンダー 9日目です。これを書いているのは12月12日ですが、あまり気にしないことにします。昨日の記事は Hamada.rb #16 に参加 - いまブログ です。

今日は以下のツイートで教えていただいた内容についてまとめます。

.irbrc とは

irb の設定ファイルです。ホームディレクトリに置くと、どこから irb を起動しても読み込まれます。ホームディレクトリに .irbrc がない場合、カレントディレクトリの .irbrc , irb.rc , _irbrc , $irbrc を順番にロードしようと試みます。

ちなみに Ruby 2.7 からの irb は、複数行編集、シンタックスハイライト、入力履歴など便利な機能がたくさん追加されてとても使いやすく便利になりました。 irb を使うなら Ruby 2.7 以上の環境で使うことをおすすめします。

.irbrcRuby スクリプトなので中に Ruby のコードを書くことができます。

また、 irb の設定値も定義できます。詳細はこちらを参照してください。

library irb (Ruby 2.7.0 リファレンスマニュアル)

class IRB::Context (Ruby 2.7.0 リファレンスマニュアル)

irb に独自メソッドを定義したくなった

さて irb を使うときに特定のメソッドを頻繁に呼び出しすることがあります。

例えば、私は文字コードを確認することが多いためこのようなメソッドを頻繁に使います。

"🐈".ord.to_s(16)
=> "1f408"

このように each_codepoint にブロックを渡す処理もよく書きます。

 "☃️".each_codepoint { p _1.to_s(16) }
"2603"
"fe0f"
=> "☃️"

ord each_codepoint の詳細についてはこちらの記事に書きましたので、もし興味があればご覧ください。

Rubyで文字コードを扱うコードを書くときに便利なメソッド集 - Qiita

これらは決まりきった書き方で、一々入力するのがとても面倒でした。 Dash というアプリでスニペットを登録するか悩んでいたところ、twitter で .irbrc でクラス拡張すればいいんじゃない? と教えてもらったのでそうすることにしました。

.irbrc でクラス拡張(オープンクラス)する

Ruby では組み込みライブラリも自由に書き換えることができます。

今回は String クラスに便利メソッドを定義しました。

~/.irbrc

class String
  def each_codepoint16
    each_codepoint { |s| p s.to_s(16) }
  end

  def ord16
    ord.to_s(16)
  end
end

irb を起動すると、特に何も読み込みしなくても定義したメソッドを呼び出せます。便利!

❯ irb
irb(main):001:0> "🐈".ord16
=> "1f408"
irb(main):003:0>  "☃️".each_codepoint16
"2603"
"fe0f"
=> "☃️"

クラス拡張ですので、既存のメソッドの上書きや、バージョンアップで同名のメソッドが追加されると挙動がおかしくなる可能性があります。

独自メソッドを定義する際は、 Ruby に追加されなさそうなメソッド名にしておくと良いと思います。

参考資料

Hamada.rb #16 に参加

この記事は2020年ふりかえりアドベントカレンダー 8日目です。昨日の記事は yarn install 時の gyp: No Xcode or CLT version detected! を解消する - いまブログ です。

島根県浜田市Ruby コミュニティ、 Hamada.rb に参加しました。現在はオンラインで開催されています。

hamadarb.connpass.com

同時に Ruby Hacking Challenge in Hamada.rb も開催されています。

hamadarb.connpass.com

Ruby 3.0 preview-2

今日はちょうど Ruby 3.0 preview-2 がリリースされたので、リリースノートをみんなで読んでいました。

www.ruby-lang.org

リリースノートのリンク切れを見つけ、勉強会中に PR を立てている方がいました。

www.ruby-lang.org 用のリポジトリがあると知らなかったので勉強になりました。

github.com

github.com

bundled gems ?

リリースノートにこんな一文がありました。

以下のライブラリが新たに bundled gems になりました。Bundler から利用する場合は Gemfile に明示的に指定してください。(中略) 以下のライブラリが新たに default gems になりました。rubygems.org からアップデート可能です。

bundled gems と default gems とはなんでしょうか?

調べてみたところこういった違いがあるようです。

ライブラリ 扱い
標準ライブラリ Builtin libraries, 組み込みライブラリとも呼ぶ。 require 不要で使える Array, String など
標準添付ライブラリ Ruby に同梱されているライブラリ。 require すれば使える。 bundled gems と default gems に分かれる。 -
bundled gems Ruby に同梱されているが、gem uninstall ができる gem 。Bundler から使う場合は Gemfile に指定する minitest など
default gems Ruby に同梱されており、gem uninstall できない gem 。 rubygems.org からアップデート可能 irb, reline など

間違っていたらご指摘ください🙏

試しに reline をアンインストールしてみようとしたら怒られました。

$ gem uninstall reline           
Gem reline-0.1.5 cannot be uninstalled because it is a default gem

ちなみに bundled gems と default gems はこちらで定義されています。

ruby/bundled_gems at ruby_2_7 · ruby/ruby

ruby/sync_default_gems.rb at master · ruby/ruby

参考資料

bundled gem と default gem の違い - @znz blog

bundled gem と default gem の違いの具体例 - @znz blog

irb のバグ

以前から気になっていた irb のバグっぽい挙動を相談しました。

他の方も同じ挙動が確認できたこと、自力で直すのが大変そうなこと(Ruby で書かれている irb ならともかく、 CRuby 本体の Warning 周りに原因があると私にはお手上げです)、Ruby 3.0 リリースまでに直っていてほしいと思ったことからチケットを起票しました。

Hamada.rb は CRuby の貢献フローになれている方が多く、いろいろアドバイスいただいてすぐに起票できました。

詳細はこちらをご覧ください。

bugs.ruby-lang.org

英語書くのにとても悩んで時間がかかりました。チケットを書く時間の90%は英語で悩んでいた時間と言っても過言ではありません。リーディング・ライティング力を身に着けたいです。

今日はこんなところで。

yarn install 時の gyp: No Xcode or CLT version detected! を解消する

この記事は2020年ふりかえりアドベントカレンダー 7日目です。昨日の記事は GitHub CLIでgistを作成する - いまブログ です。

rails new とか rails s 時に yarn install --check-files を促され、 gyp: No Xcode or CLT version detected! で落ちたときの対処法です。

例えばこんなエラーメッセージ

$ rails new taskleaf -d postgresql
中略
gyp info spawn args ]
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.

No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.

gyp: No Xcode or CLT version detected!
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/Users/ku-jaku/.nodebrew/node/v12.8.0/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:344:16)
gyp ERR! stack     at ChildProcess.emit (events.js:203:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
gyp ERR! System Darwin 19.3.0
gyp ERR! command \"/Users/ku-jaku/.nodebrew/node/v12.8.0/bin/node\" \"/Users/ku-jaku/.nodebrew/node/v12.8.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js\" \"rebuild\"
gyp ERR! cwd /Users/ku-jaku/ku-jaku/2019fjordbootcamp/taskleaf/node_modules/fsevents
gyp ERR! node -v v12.8.0
gyp ERR! node-gyp -v v5.0.3

途中に出ているのでわかりにくいのですが、 gyp: No Xcode or CLT version detected! と出力されています。

解消法

Xcode を再インストールします

$ pkgutil --packages | grep CL
# 何も表示されないことを確認
$ sudo rm -rf $(xcode-select -print-path)
$ xcode-select --install

参考資料