はじめに
この第二弾として、Rubyを触ってみました。環境構築に時間がかかり、休日1日分ではHello Worldまでしか進められませんでしたが、そこまでを記事にします。
私はC#やPythonを仕事で使っているため、これらの知識をベースにして理解を広げます。同じような境遇の方の理解の助けになれば幸いです。
環境構築
環境
OS: Ubuntu22.04
エディタ: vs code
rbenv, ruby-buildのインストール (Ubuntuの場合)
ここでは、rbenvというrubyのバージョン管理ツールを使ってrubyをインストールすることにしました。(Pythonのpyenv的なもの)
これにより、必要に応じて、rubyのバージョンを変えられるようになります。
rbenvとそのプラグインであるruby-buildをインストールしましょう。
rbenvのリポジトリのreadmeに従ってインストールすればOKです。https://github.com/rbenv/rbenv
-
以下のコマンドを実行すると、rbenvの設定が自動で完了します。
git clone https://github.com/rbenv/rbenv.git ~/.rbenv ~/.rbenv/bin/rbenv init
-
ターミナルを再起動します
-
以下のコマンドを実行し、ruby-buildをインストールします。
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
-
ターミナルを再起動します
-
完了です
aptでもrbenvはインストールできるのですが、こちらは保守されていないようです。注意しましょう。
rbenv, ruby-buildのインストール (Windowsの場合)
Windowsでrbenvを直接使うことは厳しいようです。(一応rbenv-winなどのリポジトリがgithub上にありますが、保守されていなかったりするので、使えるかどうか不明です)
そのため、Windowsでは以下の記事のようにWSL上のUbuntuなどにインストールする必要があります。
rubyのインストール
rubyのインストールにあたって、Ubuntu22.04では先にlibyaml-devをインストールしておく必要があります。これがないと、"psych"が見つからないというエラーが出ます。
sudo apt update
sudo apt install libyaml-dev
rbenvのオプションを指定したあと、インストールします。今回は、最新のバージョンであるruby 3.3.5をインストールしています。
export RUBY_CONFIGURE_OPTS="-with-openssl-lib=/usr/lib/x86_64-linux-gnu"
rbenv install 3.3.5
rbenv global 3.3.5
最初は、オプションを設定せずにインストールを試みたのですが、openssl関係のエラーが出てしまいまったので、オプションを設定しました。
エラー詳細
次のようなエラーメッセージが出ていました。openssl:
Could not be configured. It will not be installed.
/tmp/ruby-build.20240908120119.182503.Suz0p0/ruby-3.3.5/ext/openssl/extconf.rb:33: OpenSSL library directory could not be found in '/home/{ユーザー名}/.rbenv/versions/3.3.5/openssl/lib'. You might want to fix this error in one of the following ways.
* Recompile OpenSSL by configuring it with --libdir=lib to specify the OpenSSL library directory.
* Recompile Ruby by configuring it with --libdir=<dir> to specify the Ruby library directory.
* Compile this openssl gem with --with-openssl-include=<dir> and --with-openssl-lib=<dir> options to specify the OpenSSL include and library directories.
Check /tmp/ruby-build.20240908120119.182503.Suz0p0/ruby-3.3.5/ext/openssl/mkmf.log for more details.
psych:
Could not be configured. It will not be installed.
Check /tmp/ruby-build.20240908120119.182503.Suz0p0/ruby-3.3.5/ext/psych/mkmf.log for more details.
opensslのlibraryのパスを指定しないといけないようだったので、Ubuntuに標準で入っているopensslのライブラリの場所"/usr/lib/x86_64-linux-gnu"を指定しました。
3.3.5は、Ubuntuに標準で入っているopenssl 3が使えましたが、3.0以前のバージョンはopenssl 1を別途インストールして使わないといけないみたいです。
VS codeの設定
コードを書きやすくするために、linterとformatterやその他の便利ツールをインストールしましょう。
色々調べたところ、自動補完や定義へのジャンプができるsolargraph(言語サーバー)と、linter/formatterであるrubocopの組み合わせが良さそうです。ただし、solargraphはauto formatをできないようなので、別の言語サーバーであるRuby LSPと組み合わせます。
デバッガーには、VSCode rdbg Ruby Debuggerを使います。
solargraph
- gemでsolargraphをインストールします
gem install solargraph
- VS codeでRuby Solargraphをインストールします
- Ruby Solargraphの設定で、DefinitionsとDiagnosticsをtrueにしておきます。
Ruby LSP
- VS codeでRuby LSPをインストールします
- Ruby LSPの設定で、Formatterにrubocopを選択しておきます。
- setting.jsonで、以下を追記します。
これにより、FormatterにはRuby LSPが使われるようになり、rbファイルの保存時に自動でformatされるようになります。linterはSolargraphに担当してもらうため、空配列を指定することでRuby LSPの機能を無効にしました。
"[ruby]": { "editor.defaultFormatter": "Shopify.ruby-lsp", "editor.formatOnSave": true }, "rubyLsp.linters": [],
VSCode rdbg Ruby Debugger
- gemでdebugをインストールします
gem install debug
- VS codeでVSCode rdbg Ruby Debuggerをインストールします
- VSCode rdbg Ruby Debuggerの設定で、Use bundlerにチェックをいれておきます。
以上で環境が整いました。VSCodeを再起動しましょう。
プロジェクトディレクトリの作成
適当な場所に新しくディレクトリを作成し、VS codeで開きましょう。
今回は、HelloWorldProject
という名のディレクトリを作成し、プロジェクトディレクトリとすることにしました。
bundlerの導入
rubyでは、外部のライブラリであるgemを複数使うことが多いですが、gem同士の互換性の問題が出てくることがあります。そこで、すべてのgemを管理してもらうために、bundlerを導入します。
- gemでbundlerをインストールします
gem install bundler
- VS codeで開いたプロジェクトディレクトリにて、以下のコマンドを実行し、Gemfileを作成します。
bundle init
rubocop.ymlの追加
このプロジェクトにどういったコーディングルールを規定するのかを記載します。
↑の記事を参考に、rubocom.ymlを生成しました。
動かしてみる
とりあえずHello World
ruby_practice1.rbというファイルを作りました。
構成
HelloWorldProject
├── ruby_practice1.rb
コード
# frozen_string_literal: true
print "Hello World\n"
frozen_string_literal: true
を入れているのは、rubocopに注意されたからです。