週刊とっしーぱんち

昭和生まれのブロガーが綴る、全力脱力系雑記帳

【趣味ではじめるRuby】自分で作ったクラスをJSONに変換する方法

おはよーございます。

以前書いた記事で課題にしていた、RubyオブジェクトをJSONに変換する方法。

つい先日解決しました!

osio-toshimasa.hatenablog.com

結論から書くとこんな感じです。

class TestData
  attr_accessor :num, :str, :data_hash, :data_array

  def initialize (num, str, data_hash, data_array)
    @num = num
    @str = str
    @data_hash = data_hash
    @data_array = data_array
  end

  # 定義されているインスタンス変数をハッシュオブジェトに変換する。
  # Keyはインスタンス変数名から@を省いた名前
  # Valueはインスタンス変数そのままのデータ
  def to_hash
    hash = {}
    self.instance_variables.each do |v|
      hash.store(v.to_s.gsub('@', ''), self.instance_variable_get(v))
    end
    hash
  end

  # JSONデータにする
  def to_json
    JSON.generate(self.to_hash)
  end

end

to_hashというメソッドとto_jsonというメソッドを追加しました。

なかでもto_hashがキモでself.instance_variablesで自身のインスタンス変数名を全て取得して、新しく作成したhash変数のKey名に使いました。

instance_variablesはインスタンス変数なので先頭に@がつきます。

最終的にJSONのキー名として使いたいので@はgsubメソッドで削除しています。よくよく思えば先頭一文字削除するメソッドでもよかったかも。

hash変数のvalueはself.instance_variable_getメソッドでインスタンス変数名から値を取りだしそのまま放り込んでいます。

実際のJSON生成はto_jsonメソッドで、さきほど作ったto_hashで得られたハッシュオブジェクトをJSON.generateに渡してJSONデータ化しています。

簡単なデータ構造だけなのであれば、以前書いた記事で紹介した

def self.test_data()
  JSON.generate(
    num: 1,
    str: '2',
    data_hash: {test: 1, test2: "test_str"},
    data_array: [1, "2", 3] )
end

こんな感じで直接ハッシュオブジェクトを作ってもいいのですが、与えたデータの計算が必要だったり、文字列を加工してからデータを返すときは、クラスオブジェクトにまとめて最後にto_jsonするほうが、プログラムがすっきりしそうです。

余談なんですが、以下のコードも気になっていまして

  def to_hash
    # ここと
    hash = {}

 中略
    
    # ここがなんか無駄に見える
    hash
  end

このように書き換えました。結果同じなんですけど、すっきり晴れやかな気分になっただけの自己満コードです。

  def to_hash
   # reduceを使うとハッシュの初期化と更新がスッキリ
    self.instance_variables.reduce({}) do |hash, v|
      # deleteのがわかりやすいような気がして変えました。
      hash.store(v.to_s.delete('@'), self.instance_variable_get(v))
      hash
    end
  end

ほんのすこしですが、コードが短くなってスマートに見えます。

細かいところですけど、少し工夫するだけで便利になったりコードがスッキリするのが個人的楽しいポイントです😀

あと、こうしてブログに書いてみて気づいたのですが、Rubyのコードって英語を喋っているみたいにプログラムが書けるんですよね。まるでコードがしゃべっているみたい感じます。

英語っぽく読めば何やっているか直感的に想像できるっていうのは、プログラミング不慣れな方でもとっつきやすい特長ではないでしょうか?

それでいくと、上のコードにでてくる変数のvとかわかりづらいですね😅 vとか省略せずvariableとか書いたほうがもっとわかりやすくなったかも。。

次回から英語風に読める特長も活かしつつ、プログラムを書いていきます。

では、また!

PC作業部屋を進化させたい!【妄想編】

おはよーございます。

みなさんのブログを拝見したりしているうちに、「自分の作業部屋もっと進化させたい!」という意欲が湧いてきている今日この頃です。

そこで、これ全部揃ったら震える・・至高かよっていうPC作業環境を欲しいものをリスト化しておくことにしました。

ネット回線を快適にしたい。

まずはネット回線ですね。近頃だと趣味や仕事もネット回線の充実が生命線になっているので、回線環境の充実は大事なポイントだなあと思っています。

ちなみに今のネット環境でスピードテストすると上り73Mbps、下りが89Mbpsぐらいです。3桁はいきたい。

住んでいるマンションがNURO光のマンションタイプに対応するような話を聞いたのでこれを機に回線を切り替えようかと検討中です。

モニターアームが欲しい。

今使っているディスプレイはよくあるスタンド型で高さ調節もできないタイプのやつなので、趣味で数時間使うくらいだと気にならないのですが、たまのリモートワークで、長時間作業すると気になる距離感だったり高さだったりします。

モニターアームだと柔軟に調整できそうだだなってのと、MacBookさんと2画面出力するときにも、位置調整がしやすくなりそうです。

ディスプレイも欲しい。

モニターアームに対応するディスプレイかつ、今使っているのが22インチなのでもう少し大きめのサイズにしたいっていうのがあります。

会社から支給されているPCもMacBookさんも2画面出力が限界なので、片方のディスプレイを大きめの画面にしていきたいっていう作戦です。

ワイドモニターを試してみたい気持ちもあるので、今度出かけた際に家電量販店で実物を見てみたいですね。

椅子を変えたい。

これまた趣味で使っている分にはそこまで気にしてなかったのですが、最近気になってきたアイテムです。

長時間座っているとやはり腰とお尻にダメージが蓄積されているように思います。

椅子は滅多に買い替えないので、どうせ買い替えるのならばいいものにしたいという気持ちも大きいですね。

それでいくと、アーロンチェアなどは憧れの存在ではあります。

12年保証が付いているということはそれほどまでに品質に自信を持っているということなんでしょうね。高いけど。

こういう高級なものに触れるということも人生経験として一度は体験しておきたいという気持ちも少なからずあります。高いけど。

高級車や高級腕時計などのジャンルに比べたらまだ安いもんかもしれないですしね‼️(自分を奮い立たせている)

空調欲しい。

今更なんですが、自分の作業部屋には空調がありません。

冬場はオイルヒータを持ってきたりして、暖を取っていたのですが、夏場はわりと大変です。

そしたら他のアイテムより先じゃんかという気持ちもよぎったりもします😅

エアコンつけるのが安定なんですが、エアコンって乾燥するし、なんか目が乾くのでいまいち好きになれなかったりします。。

今年こそはと思いつつ、今年もリビングのエアコンから冷風を送る作戦でいくのか。おとなしくエアコンを買うか。はたまた別の空調があるのか。

夏までになんとかしたいですね。

妄想はタダだから、楽しい😀

以上、欲望まみれの記事になんですが、考えているだけでなんだかわくわくするので、買ってみたい!ややってみたい!を我慢せずに書き出しみるのって楽しいなあと感じました。

全部実現する日が来るのかは全く別の問題ですけど、夢を書き出すといつか叶うと言いますし、書くことが行動を起こすきっかけになるかもしれないです。

では、また!

Opalを使ってJavaScriptにデータを受け渡すとき思いついたやりかた

こんにちは!

RubyのコードをJavaScriptに変換してくれるGem「Opal」について、引き続きいろいろ遊ばせてもらっています。

今回は、データの受け渡し方をもう一工夫できないかなあという模索をしている記事です。

自分で作ったRubyオブジェクトをJavaScriptに渡すには

ドキュメントを読んでると、Opalが対応しているものは、いい感じにJavaScriptに変換してくれるようです。

opalrb.com

自分が作ったクラスもいい感じに変換してみました。

まずこんなふうなクラスを作ってみて

class TestData
  attr_accessor :num, :str,  :data_hash, :data_array

  def initialize (num, str, data_hash, data_array)
    @num= num
    @str = str
    @data_hash = data_hash
    @data_array = data_array
  end

end

Opalから呼び出すメソッドを書き

      def self.test_data()
        TestData.new(1, '2', {test: 1, test2: "test_str"}, [1, "2", 3])
      end

JavaScriptから呼びます

let d = Opal.Test.$test_data();
console.log(d.num);
console.log(d.num);
console.log(d.data_hash.$fetch('test2','')); 
console.log(d.data_array[0]);

こんな感じで取れます。ハッシュのところだけ少し注意が必要で、以下のように書くとエラーになります。

let d = Opal.Test.$test_data();
console.log(d.data_hash['test_data']); // undefinedと出ちゃう。

JSONでデータを渡すという選択肢

OpalでRubyとJavaScriptの橋渡しをする上で、メソッドを介したデータのやりとりはたくさん発生するでしょう。

らそこでハッシュのときだけfetchと書かなくてはと意識しておくのは、少し大変です。

そこで、Ruby側のコードを少し変えてJSONで返したらどうだろうという案を思いつきました。

def self.test_data()
  JSON.generate(
    num: 1,
    str: '2',
    data_hash: {test: 1, test2: "test_str"},
    data_array: [1, "2", 3] )
end

そうすると、JavaScript側でHashもこんなふうに扱うことができます。

let d = JSON.parse(Opal.Test.$now2());
console.log(d.num);
console.log(d.str);
console.log(d.data_hash.test);
console.log(d.data_array[0]);

好みの問題もあると思いますが、個人的にはこっちのほうが書き方が素直に感じます。

もちろんfetch()メソッドが必要なときもあるのですが、必要な時にだけ使えるようになっていることが好みです。

データをJavaScript側に渡すときはJSONデータで、というのがよさそうですが、これの弱点はJSON.generateのところです。

JSON.generateの引数はハッシュのオブジェクトなので、最初に作ったクラスがうまく活用できていないのですよね。

自分で作ったクラスオブジェクトをJSON化できたら一番美しい

やりかたを調べているところですが、たぶんクラスのインスタンスメソッド作って、インスタンス変数をハッシュオブジェクトにしていけばいけるのかな?とか妄想だけしている状態です。

と、今回はここまで。すこし疲れたのでこちらは次回の実験とします😀

では、また!

㊗️読者数が15人になりました。ブログ続けてよかった!

おはよーございます。

つい先日、読者数が15人に増えていました。ありがとうございます!

ブログの連続更新日数も今日でちょうど10日になりまして、ダブルでおめでたいです🎉

この10日間は、ブログを読むことも意識していて、気に入ったブログはどんどん読者登録させてもらいました。

そうしているうちに、ニュースサイトやTwitterとも違う、自分なりのメディアが出来上がってきたように思います。

気づけば、ブログを読むことがすでにひとつの趣味になっていました。

趣味を楽しむブログを続けたことで、「ブログを読むのが楽しい」ということに気づけたっていうことがなんだか不思議で、こういう趣味の出会い方もあるのだなあという良い体験が得られました。

もしまた読者数が増えていったとき、どんな「きづき」があるのかという楽しみと共に、その気づきを得る機会を与えてくださった読者のみなさまに感謝しております。

これからもみなさんと共に、楽しいブログライフを続けていけたら嬉しいです。

引き続きよろしくお願いします🙇

では、また!

【趣味ではじめるWebサイト制作】RubyGem 「Opal」についてわかったこと。

おはよーございます。

以前しらべたRubyのGem「Opal」について、その後もいくつかプログラムを書いていたのですが、意気揚々とJavaScriptのコードに変換・・と思いきやエラーが出てしまって変換失敗。原因を調べてみてわかったことがありました。

osio-toshimasa.hatenablog.com

「標準ライブラリは使えるけど、全部使えるわけではない。」

Opalが扱える標準ライブラリはRubyが持っている標準ライブラリと一致しないことがわかりました。

どうやら、ここに入っているもの以外はJavaScriptに変換することはできなさそうです。

github.com

ということで、Opalを使ったとしてもそれなりに制約はあることがわかりました。

それならば最初から全部JavaScriptで書いてしまえばいい、と考えるのが自然です。

自然なのですが、将来的にWASM対応がもっと進んでいって、僕のようなひとでもブラウザでRubyをお手軽に動かせるような環境になっていったときのことを考えると、いまのうちからRubyのコードを書いておくと役に立つかもしれないですよね。未来の話なのでなんとも確証はもてませんが😅

と、実験しながら将来のことを妄想しながら、ちょいネタの実装をしてみたりしています。

サイトとして公開するには、Ruby以外のところが多く、HTMLだったりCSSだったりもちょこちょこ変えて、足りないところをJavaScriptで書いて・・というのがあって、もう少しかかりそうです。

レイアウトが苦手なんです。センスゼロなので・・。

無事公開できたら、改めてブログで紹介できればと!それまで暖かく見守っていただければ幸いです。

では、また!

MacBookさんで稀によく使ってる機能とキーボード操作。

おはよーございます。

MacBookさんでブログの執筆、プログラムを書くときなど様々な場面でまず確実に使っているキーボード操作をまとめてみました。

仕事ではWindowsPCを使っていることもあり、Macのショートカットなんだったっけ?とたまに忘れることがあるので、備忘録的な役割も兼ねています😅

スクリーンショットを撮る。

Shift + Command + 3 画面全体を撮る。

パシャっという音が鳴った後、デスクトップに画像が保存されます。

とりあえず全体を撮っておいて、後で好きなところだけ切り取ったり。という使い方を結構しているので、一番よく使うかも。

Shift + Command + 4 自分で指定範囲を撮る

ネットサーフィンして気になったとこだけ、メモしたい時や KindleやPDF書籍読んでる時に雑誌の切り抜き感覚で使ってます。

ちなみに、Shift + Command + 4 + Spaceキーを押すと、選んだウィンドウだけのスクリーンショットが撮れるんですが、左手がツイスター状態になるのであまり使っていません。

Shift + Command + 5 メニューから選んで撮る。

こんな感じのメニューが出てきて、好きな取り方を選んでスクリーンショットを撮ります。

操作がひと手間多くなりますけど、自分が何を選ぶか決めてから取れるので、わかりやすいです。

文字カーソルをキーボード操作で移動する。

Control + P  ・・・カーソルを上に 
Control + N  ・・・カーソルを下に 
Control + F  ・・・カーソルを右に 
Control + B  ・・・カーソルを左に
Control + A  ・・・カーソルを行の先頭に
Control + E  ・・・カーソルを行の末尾に

文字カーソルは矢印キーで移動することもありますが、ちょっとした移動だとキーボードから入力したほうが早い時があるので使っています。

文字を削除する。

Control + D  ・・・カーソル位置の右の文字を削除する
Control + H  ・・・カーソル位置の左の文字を削除する
Control + K  ・・・カーソル位置の行を削除する 

文字削除はキーボードショートカットでやってしまうことがメインです。

Control+HってBackspaceキーと同じ作用なんですが、Backspaceは位置が遠いので極力使わないようにしています。

Control+Dは、Macの場合ってDeleteキーが存在しないので、もはやこちらがメインなのかも?

まとめてみると、使っている種類はそこまで多くない?

文字を入力することが多いので文字系のショートカットを多く使っていますが、公式サイト見てみると、全体の量としては少ないんじゃないかなあと思います。

support.apple.com

実はめっちゃ便利な機能が埋もれているかもしれないので、改めて公式サイトのショートカットを見直してみようと思いました。

では、また!

ブログを7日間連続で更新しつづけたら、書くのも読むのも楽しくなってきました。

おはよーございます。

本日で当ブログの連続更新日数が7日間になりました。やったぜ!

このブログの連続更新日数は今まで3日くらいだったかと思うので倍以上の記録更新です。

その要因を考えてみたのですが、自分なりに気づいた点は以下の3つです。

  • GW中、長めの休暇がもらえたことで可処分時間が単純に増えた。
  • 他の方のブログを読んでいたら、内容が面白くて、書きたい意欲が増した。
  • ブログを書いている最中でも、書いた後でも、次に書きたいことがどんどん湧いてきた。

可処分時間が増えたってのが一番大きい要因ではあるのですが、同じくらいに大きいところとして、他の方が書いているブログをジャンル問わず色々読ませてもらったのが大きいです。

読んだ記事の系統を箇条書きにするとこんな感じです。

  • 作業部屋のレイアウト、DIY系の記事。
  • PC作業環境の記事
  • プログラミングの記事
  • コーヒーなど嗜好品の記事。
  • こころのあり方や日常生活など、日記系の記事。
  • ヘルケア・美容系の記事

みなさん記事の書き方に個性があって、中にはプロの方なのか?というほど文章力というか構成力がすごいブログもたくさんありました。

そういうブログをのぞいていたら書きたい意欲がふつふつと湧いてきまして、新しい記事を書いてみたら、その内容を元に次はこれをとなって。

ひと段落したら、過去に自分が書いた記事も気になってきて。

見返しているうちに記事の整形とか調整を直したくなって。

まるで自分の家の増築と改築を一緒にやってるような感覚といった感じで、たのしくなってきまして、気づいたら7日目になっていました。

仕事も再開したこともありますし、毎日更新し続けることが目標なわけでもないのですが、ふと自分のはてなブログの記録をみたことで妙に意識してしまっている部分もあり 笑

なので、連続更新日数二桁までいきたいなあなんていう新たな目標も片隅に置きつつ、ブログを読む、ブログを書くという根本的な楽しさを忘れないようにまったり続けていければと思います。

たまたまこのブログを訪れて、読んでくださっている方。 はてなスターをつけてくれている方。 読者になってくれている方。

すべての方に感謝です。そして、これから仕事に行ってまいります!

では、また!

iPhoneの文字入力が快適になった設定たち3つ

おはよーございます。

過去の記事掘り起こしシリーズなのですが、iPhoneの文字入力が快適になった設定について、改めてまとめておきます。

というのも、少し前に書いた記事でセットアップメモを残しておこうという反省を踏まえて色々棚卸ししたい心が芽生えたというのがあります。

入力設定は好みの問題もあるので、個人差や好みがあると思いますが、読んでくれた方にもなにか参考になる情報があれば幸いです。

フリックのみをONにする。

iPhoneのキーボード設定にある「フリックのみ」という設定をONにします。

そうするとですね、たとえば「あああああ」みたいな同じ文字を連続で入力するときにとても便利になります。

OFFのままで「あ」を連続で打つと、「あいうえお」みたいな感じでキーに設定されている文字で次々に変換されてしまって、確定されないんですよね。

僕の場合は文字打つときはフリック入力しかしないので、タップで文字が切り替わる機能を封印することでだいぶ快適になりました。

自動修正をOFF

自動修正というのは、ONにしているとき、ある程度文字を打ち間違えても正しい単語に補正してくれる機能です。

なんですが、あえて略語で書くときが多いときは、逆に補正されてしまうと困ってしまう場面があったので、今はOFFにしています。

自動大文字入力をOFF

これはONにしていると、英字で打ったときに先頭を大文字に変換してくれます。

ですが、自動修正同様に、あえて小文字にしたいときのが多いようの感じているので、今はOFFにしています。

設定方法

たった3つなのですが、以上の設定を行うことで、文字入力がだいぶ快適になりました。

とはいえ、iPhoneの動作を司るiOSも常にアップデートをしているので、今設定を戻したら操作感はまた変わっているのかもしれないですね。

このあたりの設定方法は、一度設定してしまうとなかなか変えないので、設定を戻すにしても、いつの間にか忘れてしまいがちなんですよね😅

そんな自分への振り返りも兼ねて、具体的な設定方法を以下に書いておきます。

まず、設定アイコンから一般を選択します。

つづいてキーボードを選択します。

ここで出てくるメニューのうち赤い枠で囲った部分が今回設定した箇所になります。

設定を元に戻してみる、というときにも昔の設定を覚えておくことって結構大切だなあと感じた本日の記事でした。

おまけ

設定とは別で、いまさら知ったよ!的な小ネタなんですが、文字入力画面にある空白ボタンを長押しすると、入力カーソルが自由に移動できるということを知りました。文字カーソルをちょうどいいところに合わせるのに便利です😀

では、また!

osio-toshimasa.hatenablog.com

GW明け初日なので改めて。幸福度を高めるために意識していること3つ

おはよーございます。

ゴールデンウィークも終わってしまいましたね。。

ここ最近の記事は、技術的な話ばっかりだったので、今回は息抜きというか、趣旨を変えまして

「個人的に取り組んでいる幸福度を高めること」

について記事にします。

1年前に書いた記事なのですが、今現在も変わらず想っていることなので文字の体裁だけ整えて再掲載します。

振り返ること、感謝できることを考えること。

感謝する気持ちを忘れるな。ってよく言われることだと思うんですけど、実生活を営んでいるとついつい感謝の気持ちを忘れてしまうことがあるんですよね。

たとえば、仕事内容や職場の人間関係などで、いつの間にかストレスが溜まっていることがあります。

ストレスが溜まっているその瞬間では気づけないのですが、帰りの電車の中だったり、風呂にはいっているときだったり。ふとした瞬間にストレスが溜まっていることを自覚しているときがありまして、そういうときにこそ

「ところで、いま感謝できること、感謝することはないんだっけ?」

と自問自答することにしています。

ストレスに感じていたことも、感謝するという視点でで考え直してみると、心が前向きになって、すっと心が落ち着くことがあります。

もちろんそうでもないこともあります 笑

他人に合わせ過ぎない。孤独を恐れない。

家庭でも学校でも会社でも、社会生活を営んでいくうえで、何かしら自分以外の誰かと関わる機会はあるかと思います。

周りに合わせていく協調性も必要ではあるんですけど、

「ああ・・いまの自分は無理してるなあ」

と感じ始めたとしたら、それ以上は関わらないようにしています。

限界値って人それぞれ違うと思うんですよね。

人と接することが大好きな人っていると思うんですけど、僕の許容量はそういう人たちと比べると随分小さいように思います。

自分の限界値を見極めてそれ以上は人付き合いしないっていうのが僕にとっては幸福度が高まるんですよね。

周りの人がそれによって離れていってしまうこともあるかと思いますが、その結果、ひとりだけになったとしても、いつか同じような考え方の人に出会えればいいなあぐらいに気楽に考えています。

このはてなブログもそうですが、ひょんなところから同じ波長の人にも出会えたりするかもしれないですしね。いまが孤独であったとしても明日になったら急に友達増える機会が、SNSやネットが充実している現代ではいくらでもあるんじゃなかいなあと感じています。

ゼロサムゲームには参加しない。参加するならプラスサムゲームになるようにルールを変える

わかりづらいので言葉の説明からはじめますが、ゼロサムゲームというのは、参加者全員の総得点を足すと必ず0点になるというゲームです。たぶん。

例えば参加者が2人いて、ひとりが100点獲得できる場合、もうひとりは100点失うということになります。

つまり誰かが得すると、必ず誰かが損するということです。

趣味とか余興でゼロサムゲームするのは全然構わないんですが、世の中の出来事でゼロサムゲームになってることってわりと多いよなと感じています。

例えば学校の通信簿や会社の評価なんかもゼロサムゲームに近い状況だと思います。

「他人の幸福や富を奪って自分が豊かになる」

社会で生活する以上、避けては通れないものもあると思うのですが、もし自分が選択できる状況に置かれているとしたら、この仕組みがゼロサムゲームであるかどうかをよく考えて、慎重に決断したいです。

そのうえで、どうしても参加しなくてはいけなくなったら、ゼロサムではなくプラスサムゲームにならないか?なんとか、アイデアを捻り出したいです。

プラスサムゲームというのは全員に利益があるってことですね。参加してくれる人がふえるほど、豊かになるような仕組みを作ったり、みずから参加することが、自分自身の幸福度をより高めることにつながっていくんだと思っています。

まとめ:幸福度を高めるために、ネガティブ思考の連鎖に巻き込まれないように考え方を見直す。

3つとも共通してるなと思うのは

「情報に流されそうなとき、一度立ち止まって考えること」

でしょうか。

周りの環境。自分自身が抱えるストレス。人間関係。社会の仕組み。

いつの間にか、自分や他人を不幸に招くような考え方や行動になっていないか、考え方を見直すようにしていきたいです。

そんなわけでGW明けも、仕事も私生活もほどよくがんばっていきます😀

では、また!

【趣味ではじめるRuby】MacBookさんでRubyをはじめた手順。

おはよーございます。

今更すぎる話なんですが、実行しているRubyのバージョン情報などをさらっと紹介した流れの中で・・・


そういえばRubyってどうやってインストールしたんだっけ?

という思いが脳裏を駆け巡り、自分のやったことの棚卸しとして、MacRubyをはじめたときの手順をまとめてみることにしました。

Macに最初からRubyはインストールされている・・けど古い

実はMacを買って起動したときからRubyは使える状態にあります。

ありがてえ・・と思いきや、Rubyのバージョンが少し前のものです。

# 環境は MacBook Pro 2020 です。

% /usr/bin/ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]

当時の最新版は3.0だったので、せっかくなのでRuby3.0をインストールしようと思ったのが始まりでした。

Homebrewとrbenvという存在に出会う。

調べてみると、Rubyの最新版を手に入れるには、rbenvというものをインストールするのがいいらしいということでした。

複数のRubyをインストールできるので、新しいのを試した後古いのでも動くのが試したり、その逆もできたりと、色々試してみるにはよさげとのこと。

そして、そのrbenvを使うには、Homebrewというものをインストールしなければいけないということを知ります。

なんかゴールが遠のいていく感覚に襲われながらも、Homebrewをインストールすることに。

Homebrewのインストール

このページに書いてある手順通りにやったらあっさりインストールできました。 さきほどの、ゴールが遠のく感覚が一気に解消された感です。ありがたや🙏

brew.sh

rbenvのインストール

つづいてrbenvのインストールです。以下のrbenvの公式READMEをベースにして、わからないところをネットで調べながら試行錯誤した記憶があります。

github.com

メモに残っていた残骸をかき集めた感じ、最終的に以下のような手順でセットアップした模様です。

rbenvのインストール

# インストールする
brew install rbenv
brew install ruby-build

# 一応最新版に更新をしてみる。
brew upgrade rbenv ruby-build       

Macログイン時?にrbenvの初期化を自動でやってすぐに使えるようにする

#vimはテキスト編集を行うソフト。テキストエディタともいう。なので、vimじゃなくても大丈夫
% vim ~/.zshrc

--- ここから.zshrcというファイルの中身です。

# に以下を記述する。場所はどこでもいいけど、最終行に追記した。
eval "$(rbenv init -)"

--- ここまで

# このコマンドを実行すると、.zshrcに追記した内容が反映されるらしい。
% source .zshrc 

rbenvでRubyをインストールする。

# rbenvというコマンドが使えるようになっているはず。
# ダメだったら新しいターミナルを立ち上げる。
% rbenv -v
rbenv 1.2.0

# インストールできるRubyのバージョン一覧。めっちゃ出てくる。
% rbenv install --list-all

# Rubyをインストール。コーヒー休憩でもしながら気長に待ちます。
% rbenv install 3.0.0-rc1

インストールしたRubyを使えるようにする。

# インストールしたRubyたちを一覧で表示する。
# ここがどう表示されていたのかの記録が残っていないので多分こんな感じで書いています。
% rbenv versions 
*  system
  3.0.0-rc1

# 使いたいRubyのバージョンを以下のコマンドで変更します。
% rbenv global 3.0.0-rc1

# このコマンドを呼ぶと反映されるようです。※ここも少し曖昧・・
% rbenv rehash

# もう一度確認すると、*が3.0を指しているはず。
% rbenv versions
  system
*  3.0.0-rc1

# この状態でRubyのコマンドを使って最終確認できればインストール完了!
% ruby -v
ruby 3.0.0rc1 (2020-12-20 master 8680ae9cbd) [x86_64-darwin20]

まとめ:繰り返し使いそうで、さかのぼって復元できないものはちゃんとメモしよう。

この記事を書きながら、当時のメモを見ていたのですが、所々で情報が欠落してたり順番が不正確な箇所がありました。

rbenvのところは機能説明読む限り、多分こうだろうなっていう推測を元に補完しているので、ちょっと自信がないです・・。

この手のセットアップ手順って一度インストールすると、以前の状態ではなくなって復元できなくなるので、ちゃんとメモしておくことが大切だなと改めて実感しました。次、頑張ろう‼️

今借りてるサーバにもいずれはRubyをインストールして実行できるようにしたいので、その時にこの記事の真価が試されそうです。(記事書いたら力尽きてセットアップまでしない人)

では、また!