週刊とっしーぱんち

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

【劇的ビフォーアフター】ブログ記事内のRubyコードを見やすくしました。

おはよーございます。

タイトルにあるとおり、今まで紹介してきたRubyの記事でソースコードをところどころ載せていたのですが

背景黒と文字のグレーがそこはかとなく見づらいですよね・・

前から気づいてはいたのですが、いつか直そうとは思いつつも、どんどん先延ばしになってしまっていました。

僕の性格上、「このパターンは永久にやらないやつだ!」という自負(?)があり、危機感にかられて、ついさきほどCSSをいじくって直しました。

それがこちら!

なんということでしょう!(某番組に寄せて言いたいだけです。)

背景をグレーにして枠線をつけただけで、なんか一気に見やすくなりました。 そりゃそうだって話ですね 笑

というちっさい変更点の記事でした!

ちっさいけど、進化はしてるので、こういうのも記事として記録に残せばいつか振り返ったときに楽しめるかもしれないですしね。たぶん。今日はここまでです。

では、また!

osio-toshimasa.hatenablog.com

osio-toshimasa.hatenablog.com

【趣味ではじめる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とか書いたほうがもっとわかりやすくなったかも。。

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

では、また!

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化できたら一番美しい

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

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

では、また!

【趣味ではじめる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で書いて・・というのがあって、もう少しかかりそうです。

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

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

では、また!

【趣味ではじめる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をインストールして実行できるようにしたいので、その時にこの記事の真価が試されそうです。(記事書いたら力尽きてセットアップまでしない人)

では、また!

Opalを使ってRubyのコードをJSに変換するなどした【趣味で始めるWebサイト制作】

おはよーございます。

  ブラウザでRubyを実行できる仕組み、WebAssemblyを自分のWebサイトに入れられないかとちょこまかやってみたものの、あえなく挫折しました。  

なんですが、せっかくなのでRubyのコードをWebサイトでも使いたいという欲望は捨てきれず、どころか欲望増し増しになったので、別の方法で実現するべく、「Opal」というGemを試してみることにしました。  

Gemとは?

RubyにはGemというしくみがあって、Rubyに標準搭載されている機能をさらに拡張したり、別の機能を実現するための拡張機能を有志のみなさんが開発・提供してくれています。    

使う側はGemを探してインストールするだけというなんともありがたい機能です。しかも無料。

Ruby自体も無料なので、優秀な方達が作ったRubyの標準機能に加えて拡張機能がタダで入手できるという、よくよく考えるととんでもなく太っ腹なシステムです。 

  Gemの語源は英語のGem「ジェム」そのままで、宝石という意味なんだそうです。Rubyが中心にいて、キラキラ輝くGemたちが散りばめられているようなイメージでしょうかね。なんかロマンチック。  

Opalとは?

Opal「オパール」はGemのひとつです。

Rubyで書いたプログラムをJavaScriptに書き直してしまうというGemです。  

Rubyコードそのままだと、JavaScriptからは利用できないのですが、JavaScriptに変換してしまうので普通にJavaScriptコードとして使うことができます。

Webブラウザ上でJavaScriptは実行可能です。ということはつまりRubyのコードがWebブラウザ上で動くようなもんです。すごい✨  

実際に使ってみました。

で、実際にどうやって使うかというのをMacBookさんを使って試してみました。MacとRubyの環境は以下の通りです。 

# MacOS
oco@MacBook-Pro ruby % sw_vers                                                                                                               
ProductName:    macOS
ProductVersion: 12.3.1
BuildVersion:   21E258

# Ruby
oco@MacBook-Pro ruby % ruby -v
ruby 3.0.0rc1 (2020-12-20 master 8680ae9cbd) [x86_64-darwin20]

  まず、Gemをインストールします。

# とりあえず最新
gem install opal

# インストールされたバージョン
oco@MacBook-Pro ruby % opal -v
Opal v1.5.0

ドキュメントを読みながら適当にRubyのコードを書いてみました。

require 'date'

class Test

  # クラスメソッドにすると呼び出せるみたい。
  def self.say
    # putsはJavaScriptの世界でconsole.logに変換される模様。
    puts 'hello ruby'
  end

  # requireした標準ライブラリも呼び出せる。
  def self.today
    puts Date.today
  end

  # JavaScriptのオブジェクトに良い感じに変換してくれる。
  def self.today_native
    # JavaScriptのDateに変換してくれる。
    Date.today
  end

  # JavaScriptから値も受け取れる。
  def self.addition(a, b)
    a + b
  end
  
end

これを以下のコマンドでJavaScriptに変換できます。

# --no-method-missing:method missingというRubyの機能を使わない場合
opal --no-method-missing --compile test.rb > test.js

できたJavaScriptファイルをHTMLファイルに組み込んで呼び出してみます。

<html>
<head>
    <meta charset="utf-8"/>
    <script src="test.js"></script>
    <script>
        Opal.Test.$say();
        Opal.Test.$today();
        console.log(Opal.Test.$today_native());
        console.log(Opal.Test.$addtion(10,10));
    </script>
</head>
<body>
</body>
</html>

ブラウザには何も表示されないですが、Safariだとブラウザ上でトラックパッドをダブルタップしてメニューを出し、要素の詳細を表示を選択。コンソールという画面に切り替えると、さきほど呼び出したスクリプトの実行結果が表示されました。

Chromeでも同じような機能はあって、おなじくダブルタップからの検証というメニューがそれにあたります。

 

まとめ:Rubyのコード書きたい&貯めたい欲が強めのときはおすすめ!

とっかかりとして、簡単なコードだけ動かして試してみた感じ、すごくあっさりと動作してくれたので、僕のスキルでも十分に使えそうな感じはします。

メリットとしては、やはりRubyが使えるってのが一番になりますかね。あとはJavaScriptに変換するといっても元のRubyコードはそのまま残るので、Rubyのコード資産として貯めていくことができるのが嬉しいポイントです。


デメリットは、実際使うときの呼び出す側としてのJavaScriptの知識は必要になってくるので、Webサイト専用という目的で使う分には、学習コストが高くついてしまうところでしょうか。


そもそもWebサイト専用ならばJavaScriptだけ覚えればいいですからね。


そう考えると、Webサイトにも応用できるかもしれないという付加価値はあるけれど、Rubyのコードを書きためていきたいって欲求がどれくらいあるか がキモなんじゃないかなと思いました。


ところで、今回色々と遊びながら次にやってみたいことが浮かびまして、次回は自前のWebサイトに乗っけて小さなコンテンツを作りたいです。


というかWebサイト制作も全く進んでないし、一石二鳥な気がします!😅


osio-toshimasa.hatenablog.com

では、また!

 

RubyとWebAssemblyを調べ、そして打ち砕かれた話

https://cdn-ak.f.st-hatena.com/images/fotolife/o/osio-toshimasa/20220306/20220306114953.png

おはよーございます。

GWもちょうど真ん中で折り返しぐらいでしょうか。このブログを読まれている方の中にはお仕事や学校の方もいらっしゃると思うので恐縮なんですが、僕は数年ぶりくらいに10連休という長期のお休みをいただきまして、のんびり楽しく休暇を満喫しております。

さて、WebAssemblyバイナリを使って自分なりに実験してみたのですが、自分が用意したwasmバイナリをWebブラウザで動かすことができませんでした。初期化するところでエラーが出てしまって解消せず、原因もよくわからなくてお手上げでございます。こればっかりは自分の力量が不足しております。

Webブラウザで動かしてみる、という実験は失敗に終わったのですが、OS上でwasmバイナリを実行するということはできました。以下のリンクにあるQuickSampleというものを参考にやってみたら無事動いて感動です😭

github.com

1個つまずいたところがあって、wasi-vfsというものを実行する際に、僕のMacBookではなぜか動かずでした。こちらも僕の力量が不足していて解決には至らずだったので、Macのほうは放置。レンタルサーバ上で環境を構築しなおして動かすことができました。未来の僕が何か解決してくれることを期待して、実験環境をメモしておきます。

# ダメだった・・MacBookPro 2020
% sw_vers
ProductName:    macOS
ProductVersion: 12.2.1
BuildVersion:   21D62

# これを実行するとエラーが出ちゃう・・
% wasi-vfs pack ruby.wasm --mapdir /src::./src --mapdir /usr::./head-wasm32-unknown-wasi-full/usr/ -o my-ruby-app.wasm 
zsh: exec format error: wasi-vfs

# 動いた! 
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

こういう失敗の記録もある種のタイムカプセル的な役割になったらいいなと期待して、記録残しておくのもいいのかなと自分を説得することにします 笑

RubyとWebAssemblyの組み合わせそのものにはとても魅力を感じていて、僕のような一般人でも気軽に動かせる日が来たらかなり盛り上がるんじゃないかなと、引き続き期待感を持って情報を追っていきたいです。

ところで、RubyのWeb活用というところは引き続き興味を持っています。Webといえば、RubyOnRailsを使うのが定番のようなのですが、僕がひねくれているせいか(?)あまり食指が動かず。


ブラウザ上で動かすだけにしたいので、以前JavaScriptのライブラリを探しているときに調べた、OpalというGemを使ってRubyのコードをJavaScriptに変換して動かす、というのがとっかかりとしては始めやすいのかなあと思ったりしました。以前調べた時は、素でJavaScript書く方が手っ取り早いという結論だったのですが、今は自分が書いたRubyのコードを増やしていきたいという、別の目的が生まれているのでちょうどいい機会なのかもしれないです。

なので、次回はOpalをインストールして使ってみようかなと思います。

余談ですが、はてなブログ書いているときにこういうコードブロックを書くときついつい何が対応しているか忘れがちなので、以下にリンクを貼ります。

help.hatenablog.com

WebAssemblyについては、こちらの記事でも紹介しています。

osio-toshimasa.hatenablog.com

では、また!

2022年 Ruby アソシエーションサポーターになりました。

こんにちは!5月はじめての記事更新となります。よろしくお願いします✨

さて、Ruby推していきたいという話をこのブログで何度か記事にしていましたが、この度、Rubyアソシエーションサポーターというものにならせていただきました。

Rubyアソシエーションサポーターとはなんぞ?

寄附という形で、Rubyの事業活動と発展を支援するというものです。今回は個人寄付というかたち応援することにしました。 www.ruby.or.jp

Rubyに関する記事は何度か取り上げさせてもらってるのですが、Rubyを応援する!ということができているのかはとっても怪しいほどのしょぼさではあります。なので今回は、一番わかりやすい応援の形として寄付するという選択をしました。ですが、金額はしょぼいので結局しょぼいかもしれません😅

寄付の方法はカンタン

手続きは簡単で、Webフォームから必要事項を記入するとメールが送られてきます。指示に従って指定口座に銀行振り込みを行えば手続き完了です。

なんで応援するのだろう?

いまのところRubyというプログラム言語を仕事で使ってはいないので、事業に関わってもいないし、正直そこませんでも!という考え方もあるとは思いますが、答えは単純で「Rubyが好き」だからです。

Rubyのプログラムを楽しむというコンセプトは好きだし、日本が好きだし、日本人が作ったプログラム言語なのだから好きだし、好きだからです。なんだそれ!って話ですが、好きなプロレスラーを応援したり、美味しい料理を食べたり、好きなゲームで遊んだりのなかに、Rubyがあるだけ、という感じでしょうか。

プログラム言語だからといって特殊なものではなくて、好きなものの一部にたまたまRubyがあるという感じです。

個人の寄付額は一口5,000円からだったので、金銭的にも他の趣味で払っている金額と大きく違わないということも応援しやすかったです。

プログラミング言語Ruby」を引き続き書きっぱなしていきます。

Rubyアソシエーションサポーターになったから特別何かやるということはいまのところ考えてはいないのです。

ただ、このブログの基本部分となる「趣味をたのしむブログ」「自分の好きを紹介、発信するブログ」のなかにRubyは入っているし、今後もRubyを応援しつづけていきたいと思いますので、このブログを読んでくださっている方の中にも、Rubyに興味を持っていただいたり、好きになってくれたら嬉しいですね😊

では、また!

www.ruby.or.jp

osio-toshimasa.hatenablog.com

【趣味ではじめるRuby】 WASMを使ったWebサイト「TryRuby」を触ってみました。

おはよーございます。

昨日が週末金曜日ということで、心が穏やかになった時間を使って、WebAssemblyことWASMを使って作られたサイト「TryRuby」を少しだけ触ってみました。

try.ruby-lang.org

理解が足りてない所が多々あると思いますが、使ってみた所感と、使いながら気になって調べたことだけ忘れないようにまとめておきます。

組み込みライブラリとして用意されているものは、ほぼ全部使えそう

classだったりmoduleだったり、eachとかwhileとかプログラミングの練習として必要なものは全部揃っている印象でした。全てのメソッドを動かしてみたわけではないので一部未対応のものはあるかもしれません。

標準ライブラリは使えなかった

逆に標準添付されているライブラリは使えませんでした。具体的にはrequireして使うやつですね。require 'date'とかそういうの。

というよりも、requireというメソッド自体は使えるので、ブラウザ上では別のやりかたがあるのかもしれないですが、その辺はよくわかっていないです。

WASIの仕様には、いまのところネットワーク機能がないらしい

もし標準ライブラリが使えるようになっても、WASIの仕様としてはまだネットワーク機能がサポートされていないようです。WASMとして使う分には使えるからブラウザからは呼び出せるのかも?

標準ライブラリが入ったWASMがあるっぽい?

探してみたら、標準ライブラリつきのruby.wasmというのをみつけました。・・・が、まだやりかたがわかってないのでこれは自分のサーバに置いてみて試してみたりする必要がありそうです。

github.com

wasm自体を自分のサーバに置いて動かしてみたら、もう少し勝手がわかってきそうです。今回はこの辺にして、少しづつ理解を深めていきたいと思います。 では、また!

osio-toshimasa.hatenablog.com

Rubyがブラウザでも動かせるようになる!? WebAssemblyとWASIとはなんぞ?

おはよーございます。

先日に引き続き、個人的に強い印象に残ったできごとを記事に残しておきたかったシリーズです。

いままで、Webサイトを制作するなかでブラウザ上で実行できるプログラム言語はほぼほぼJavaScript一択だと思っていました。少し前に書いていたこの記事も、JavaScriptというプログラム言語が前提にあって、そのなかでどんなライブラリを使うのか?という選び方をしていました。

osio-toshimasa.hatenablog.com

ところが、その前提を覆すようなニュースをみつけました。

www.publickey1.jp

なにやらRubyがブラウザで実行できるようになると。

WASMとWASIという技術を用いて実現できるようになると。

いまいちどういう理屈かはわかってないところが多いですが、僕の理解では以下の通り。

WASM(WebAssembly)とは?

  • ブラウザが実行できるバイナリコードの種類。
  • バイナリコードというのはコンピュータが実行できるように変換されたプログラムのこと。人間が書いたソースコードをもとに作られる。
  • 共通仕様化されているので、いろんなブラウザ(ChromeとかSafariとかFireFoxとか)であっても実行できる。

WASI(WebAssembly System Interface)とは?

  • WASMがブラウザの差異をなくすための仕様に対して、WASIはOS(WindowsとかMacとか)の差異をなくすための仕様。
  • ブラウザ外で動かせるWASMランタイムというのもある。有名なのはWasmarとLucetというものらしい。
  • ということは、WASI対応版のWASMをWASMランタイムから起動することで、どんなOSで実行可能なアプリケーションが作れるらしい。

この仕組みはRuby3.2で導入されるべく現在も作業が進められているそうなんです。

無事導入されたら、Rubyの可能性がまたひとつ広がっていきそうで楽しみですね😀

というか楽しみ過ぎて自分の環境でも動かせるのか試してみたいなあっていう欲がむくむく湧いてきたのでもう少しいろいろとしらべてみようと思います。

では、また!