orangeliner.net BLOG logo

 タグ:Ruby

1 / 1 (全 8 件)

[GCP] Cloud Functions が Ruby に対応! ローカル環境でサクっと開発

GCP の FaaS (Functions as a Service)、Cloud Functions がついに Ruby に対応しました!!

AWS Lambda では2018年末の時点で既に Ruby が使えていたので、Cloud Functions にも来ないかな~と思っていた人には朗報ですね。

GETパラメータあり

現在はβ版で、Ruby 2.6 および Ruby 2.7 のバージョンをサポートしています。
Cloud Functions の公式ドキュメントにも既に Ruby 用のサンプルコードが追加されており、普段 Ruby を書いてる人であればすぐに使えると思います。

Cloud Functions の Ruby サポートと併せて、ローカル環境での Ruby を使った Cloud Functions & Cloud Run 開発をサポートする Functions Framework for Ruby (α版)も公開されました。

作成した関数(スクリプト)のデプロイ方法は他の言語とほぼ変わらないと思うので省略しますが、今回は Functions Framework for Ruby(以下、Functions Framework)を使って、ローカル環境でどれほどスムーズに開発ができるのか試してみました。


Ruby 3.0 型の静的解析機能について(RBS&TypeProf)

2020年12月に正式版がリリースされた、Ruby のメジャーアップデート「Ruby 3.0」において実装されている 静的解析 について調べてみました。

最近では爆速で走る静的型付け言語 Go も人気ですが、Ruby で導入された静的型付けはどのようなものなのでしょうか?


WordPressやめました(Middlemanへの移行)

2017年からWordPressで運用してきたこのブログですが、次のようなデメリットが目立ってきたこともあり、SSG(静的サイトジェネレータ)へ乗り換えたので、メリット・デメリットや仕組みについてまとめてみました。
SSGにはRubyをベースとした Middleman を採用しています。

WordPressで感じていたデメリット

  • アップデート時の仕様変更
    • 特に、投稿画面がよく変わるので嫌
  • セキュリティリスク
    • Webアプリケーションである以上、どうしても脆弱性を持つ
    • 後方互換重視のため、内部設計も古い
  • レスポンスが遅い
  • 誰でも使える
    • 一般的にはメリットなのですが、エンジニアとしてはさすがにWordPressを卒業したかった

一周回って WebサーバにはHTML/CSS/JS/画像を置くだけ のシステムになったわけですが、個人の趣味ブログなのでこれで十分だと感じました。


Ruby中級者を目指して「チェリー本」を写経してみた

9月に「Ruby技術者認定試験 Silver」を受験し、90点台で無事に合格できました。

しかしながら、Silver試験はどちらかと言えば”覚える”要素が多かったような印象があり、特にクラスやモジュールについての理解が足りてないのでは?と自分自身で感じていました。

そんな中、「チェリー本」の前書きの

「Rubyプログラミングを始めてしばらく経ったが、まだまだ自信が持てない人」を想定

の部分を読んで「これだ!」と。

Ruby の知識が付け焼き刃にならないよう理解を定着させてから Gold試験にも臨みたいと思い、「チェリー本」の写経に取り組んでみました。



[Middleman 4] カスタムヘルパの作成

Rubyベースの静的サイトジェネレータ「Middleman」では、主要なHTML要素を生成するためのヘルパーメソッドが予め用意されています。
ヘルパーメソッドの引数にオプションを指定することによって、id や class 等の属性値を指定することができますが、頻繁に使用する組み合わせがあるならば専用のヘルパーメソッド(カスタムヘルパ)を作ってしまった方が便利です。

例として、今回は Middleman に予め用意されている <a>タグを生成する「リンクヘルパ」 link_to メソッドを元に、リンクを新しいタブで開くようにする link_to_blank メソッドを作成してみました。


Ruby標準モジュール「benchmark」で簡単に処理時間計測

Rubyで特定の箇所の処理に要する時間を計測したい場合、これまでは

1
2
3
4
5
start_time = Time.now
  # ・・・
  # (計測対象の処理)
  # ・・・
puts Time.now - start_time

なんてコードを書いたりしていたのですが、Rubyには標準モジュールとして benchmark が用意されており、これを使えば簡単に計測が可能なのでした。

複数の処理を一度に計測でき、余計な代入処理が無いのでコード的にも心理的にも(?)良い感じです。
複数の結果もそれぞれ任意のラベルを付けて、見やすい形で出力可能です。

検証環境

Ruby 2.7.1 / 2.1.1


RubyでXML⇒Hash変換 ActiveSupport+REXML vs. Nokogiri

Ruby で XML のデータを Hash に変換して使う必要があったが、要素数がおよそ65万もあり、Hash.from_xml でやるとものすごく時間がかかってしまったので、Nokogiri を使用した場合との比較メモ。

  • XMLファイル(ファイルサイズ:31.5MB)
    1
    2
    3
    4
    5
    6
    7
    8
    
    <IdNameList>
        <Record id="12345" name="abcd" />
        <Record id="67890" name="efgh" />
        <Record id="13467" name="ijkl" />
        #  ・・・
        # (約65万行)
        #  ・・・
    </IdNameList>
    
  • 出力するHash
    1
    2
    3
    4
    5
    6
    
    hash = {
      "12345" => "abcd",
      "67890" => "efgh",
      "13467" => "ijkl",
        ・・・
    }
    


広告募集中!
1 / 1 (全 8 件)