OCIでRuby(とRuby on Rails)をはじめよう (2022/01/29)

OCIでRuby(とRuby on Rails)をはじめよう (2022/01/29)

https://medium.com/oracledevs/getting-started-with-ruby-and-ruby-on-rails-on-oci-3ce2d4c65833

投稿者:Tim Clegg

Photo by Christina Morillo from Pexels

私はRubyが好きです。さまざまなアプリケーションで使わせてもらっていますが、その適応性の高さは本当に素晴らしいです。オブジェクト指向の良さは素晴らしいですね。必要な機能を必要な時に素早く簡単にモンキーパッチできるのは、恵みでもあり呪いでもあります。多くの柔軟性(私ではないのですが、多すぎると主張する人もいます)が、これから導入しようとする人の意欲をそぐかもしれませんが、それ以外の人にとっては、素晴らしいものです。


とはいえ、Rubyの人気は以前ほどではありません。Pythonが登場し、(少なくとも高級ランタイム言語としては)多くの脚光を浴びるようになったのです。特にPython 3ではオブジェクト指向がサポートされ、Pythonは良い言語だと思います。とはいえ、私は今でもRubyが好きです。C、C++、ASM、PHP、Python、その他多くの言語でプログラミングをしてきました。それでも、Rubyは私の心の中で特別な位置を占めているのです。


この記事は、OCIでRubyをより簡単に使うための一助になればという思いから生まれました。本当に基本的なトピックなので、必要ない/欲しいと思っているユーザーもいるかもしれませんが、多くの人が参考になる可能性が高いです。早速ですが、Ruby (と Ruby on Rails) 用の OCI インスタンスをブートストラップする方法について説明します。



ええと...これは単純な話です。なぜこの記事なのか?


ええ、わかっています。それが私の最初の反応でした。この特定のシナリオを、私の最初の反応より少し単純でなくするいくつかの変数があります。


- aarch64

- rbenv


aarch64アーキテクチャは、地球を揺るがすようなプラットフォームではないはずです。結局のところ、Raspberry Pi(およびその他の組み込み/IoT)デバイスの多さだけでも(企業におけるRISCベースのプラットフォームの復活は言うまでもなく)、aarch64が数年前にあったような奇妙な隣人ではないことを意味します。悲しいことに、すべての開発者が時代に追いついているわけではないので、aarch64では正しく動作しない(読んで字のごとく、まったくインストールできない)ライブラリやツールが時々存在します。これは変更されるでしょう。これは避けられないことなのです。時間と技術は容赦なく先に進みますから、時間の問題です。とはいえ、私はこのことにとても興奮しており、私のソリューションにおいて可能な限りポリグロット(AMD64とaarch64を利用する)になるよう最善を尽くしており、通常はもうaarch64をデフォルトとしています。


Rubyはdnf install rubyで利用できるので、rbenvは本当にここでの大きな要因の一つです。



本格的なRubyの開発では、Rubyランタイム(Railsやその他のgemはもちろん)を制御する必要があります。そこで、rbenvが威力を発揮します。この記事は sudo dnf install ruby で回避することもできますが、yum repo でその時点で利用可能な特定のバージョンをインストールしてしまいます...これは私が望んでいることではありませんね。このチュートリアルの下の方で、yum repo のバージョン (上記) が 2.5.9 であるのに対し、私は 3.0.1 をインストールすることを選択したことにお気づきでしょう。多分、あなたにとって、それは世界の終わりではありませんが、私はもう少し制御できるものが欲しかったのです。他の多くのRuby開発者も、このレベルのコントロールを望んでいるのではないでしょうか。



OCIについて少し


話を続ける前に、ここで少し立ち止まり、これから起こることの背景を整理しておく必要があります。Oracle Cloud Infrastructure (OCI)です。まだOCIアカウントをお持ちでない方は、是非とも取得されることをお勧めします。


なぜOCIアカウントを取得する必要があるのでしょうか?


よくぞ聞いてくれました。OCI Always Freeのアカウントでは、コンピュート、ストレージ、DB、その他多くのOCIクラウドサービスを無料で利用することができます。いつまでも。ええ...その通りです。永遠に!私たちがここで仕事をする理由も、納得できますよね?アカウント登録はこちらから。私の尊敬する同僚、クリスが書いた素晴らしいハウツーをご覧ください。



Getting started


まず、OCI Computeインスタンスを作成し、ログインすることから始めます。もし、この方法がわからなければ、Chrisが別のチュートリアルを書いていますので、それを見てください。私は、A1ベースのシェイプ(VM.Standard.A1.Flex)で、その時点で利用可能な最新のOracle Linux 8のイメージを使用することにしました。私はインスタンスにarm CPUを選びましたが、amd64ベースのCPUでも同じように使えます。何かをする前に、システムをアップグレードしましょう。


[opc@ruby ~]$ sudo dnf update -y && sudo dnf upgrade -y


ゼロから始めた、新しいインスタンスです。さあ、お楽しみに rbenvのインストールにはいくつかの方法がありますが、私はrbenvのインストールスクリプトを使用することにします。では、やってみましょう。



やったー これでrbenvのセットアップは完了です。あとは開発ツールやその他のパッケージ(ライブラリ)をインストールして、Rubyをローカルにビルド・インストールできるようにします(詳しくはこのページを参照してください)。



libyaml-devel パッケージは ol8_codeready_builder の yum repo に入っているので (詳しくはこのページを参照)、これが有効になったということは言っておく必要があります。上記のコマンドはかなりの数のパッケージをインストールするので、その間はじっと我慢してください。これでRubyランタイムをビルドできるようになったので、最初のRubyランタイムをインストールしましょう。



rbenvを使ったRubyのインストール


システムにRubyランタイムが(まだ)インストールされていないことに注目してください。



rbenvでは、グローバルな(システム全体の、デフォルトの)Rubyランタイムの設定と、指定したディレクトリ(プロジェクトやアプリケーションを想定)に特定のRubyランタイムをインストールするオプションが用意されているのです。今回は、1つのグローバルなランタイムを設定することにします。まず、利用可能な最新のランタイムバージョンを確認する必要があります。



あなたのマシンでこれを実行した場合、おそらく異なる出力が表示されるでしょう。私の場合は、3.1.0をインストールします(最新のものであれば、お好みでどうぞ)。


    警告:バージョンは常に変化しています。あなたの環境に合ったバージョンを選んでください(この記事で紹介したバージョンとは異なる可能性があります)。


注意: dtrace


続ける前に...rbenv install を実行しようとすると、私がぶつかったような、dtrace が失敗する問題にぶつかる可能性があります。



ネットで検索してみると、dtraceを無効化するという記事を見つけました。



前へ進む


ということで、インストールを進めていきましょう。./configure を実行するときに - disable-dtrace 引数を渡す RUBY_CONFIGURE_OPTS 環境変数を設定しているのは、そのためだとわかると思います。



ここで、rbenvはこれをグローバルなRubyランタイムとして設定する必要があります。



これで、実際に動く、機能するRubyランタイムが手に入りました 見てみてください。



やったー これをちょっとだけリファクタリングして、rbenvコマンドを短くできるようにしましょう(シェルのデフォルトでRUBY_CONFIGURE_OPTS変数を設定します)。



これで、より短いコマンドでrbenvを実行できるようになりました。



ほらね うまくいきました。環境変数として「dtraceを無効にする」フラグを設定したので、これで完全にこれを無視して楽しく道を進むことができます(それはそこに、常に存在します)。これはちょっとした旅でしたが、とんでもなく巨大なものではありませんでした。それでも、Oracle Linux on OCI を使った Ruby 開発を手っ取り早く始めるための「簡単な道筋」を示すことは価値があります。



Railsのインストール


Rubyはとても素晴らしいものですが...Webアプリを作るなら、おそらくRails(別名Ruby on Rails、略称RoR)フレームワークを使いたいと思うことでしょう。Rubyがインストールされていれば、これは実に簡単です! Railsのインストール方法に従って、必要なものを以下に示します。



Yarnのインストールが必要です(インストール方法に従ってください)。



Railsが使用するいくつかのgemsで必要となるパッケージとライブラリをインストールしましょう。



2番目のコマンドを指定しない場合、nokogiriのインストールは失敗します。



そして、glibc 2.28があるようです。



そこで、指示に従い、bundler に Ruby プラットフォームを使用するように指示します。Rails のインストール手順でいくつか省略されていることに気づくかもしれませんが、これはシステムがすでに持っているためです。Rails gem のインストールから始めます。



Railsが見られていることを確認するためのテスト。



Railsのプロジェクトを新規に作成する。



そして、イグニッションができました これでRailsアプリをスピンアップできるようになりました。やりたいことによっては、他にも必要なものがあるかもしれません(Redisやそれに相当するもの、ターボストリームなどの使用など)。ここから先はお好きにどうぞ。次の素晴らしいRailsアプリケーションを構築するための強固なプラットフォームができたと言えば十分でしょう!!!



これを自動化する


これはすべて、コンピュートインスタンスのcloud-initの一部として自動化することができます。これは、コンピュートインスタンスをスピンアップするときに、OCIコンソールに直接コピー&ペーストすることができます。以下はその方法です。コンピュートインスタンスを作成する際、「Create」ボタンをクリックする前に、「Show Advanced Options」(画面下部)をクリックします。



次に、"管理 "タブで、"初期化スクリプト"の見出しの下にある "cloud-initスクリプトの貼り付け"のラジオ選択を選択します。



そして、次のテキストをテキストボックスに貼り付けてください。



これで、上記の内容がインスタンスに渡されます。もし必要であれば、コンピュートインスタンスのTerraformリソース定義にこれを埋め込みます。



そして、これが ror.tpl ファイルの内容です (上記と同じ内容であることに注意してください。インスタンスを作成する際に OCI コンソールにコピーした内容です)。



Ruby、rbenv、Railsがすぐに使える状態で、完全に機能するOCI コンピュートインスタンスを手に入れることができるのです。Railsが不要なら、その部分を省略すればいい......ということです。


cloud-initはバックグラウンドで(ほとんど無音で)実行されるため、完了したらファイルに書き出すことになります。このため、すべての作業が終了したらファイルに書き込むようになっています。もし、何をやっているのかモニターしたい場合は、これを試してみてください。



これで、何をしているのかがわかります。インスタンスの作成が完了するまでには、数分かかると思われます。しかし、数分でインスタンスを作成することができますので、安心してください。cloud-initが完全に完了した後、新しいシェルセッションを開かなかった場合は、忘れずに実行してください。



そうでない場合は、シェル(SSH)セッションを終了し、新しいセッションを開始します。この時点で、Rubyにアクセスし、使用できるようになるはずです!



まとめ


これで、Ruby開発のための素晴らしいプラットフォームが手に入りました。手動でセットアップするだけでなく、完全に自動化された方法もあるのです。なんてクールなんでしょう! 次回まで、ハッピーコーディング、そしてビットを流し続けてくださいね。


コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)