0
0

休日に新しい言語に触れたい ~Ruby編 環境構築からHello Worldまで~

Last updated at Posted at 2024-09-08

はじめに

この第二弾として、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

  1. 以下のコマンドを実行すると、rbenvの設定が自動で完了します。

    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    ~/.rbenv/bin/rbenv init
    
  2. ターミナルを再起動します

  3. 以下のコマンドを実行し、ruby-buildをインストールします。

    git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
    
  4. ターミナルを再起動します

  5. 完了です

    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

  1. gemでsolargraphをインストールします
    gem install solargraph
    
  2. VS codeでRuby Solargraphをインストールします
    image.png
  3. Ruby Solargraphの設定で、DefinitionsとDiagnosticsをtrueにしておきます。

Ruby LSP

  1. VS codeでRuby LSPをインストールします
  2. Ruby LSPの設定で、Formatterにrubocopを選択しておきます。
  3. setting.jsonで、以下を追記します。
    "[ruby]": {
        "editor.defaultFormatter": "Shopify.ruby-lsp",
        "editor.formatOnSave": true
    },
    
    "rubyLsp.linters": [],
    
    これにより、FormatterにはRuby LSPが使われるようになり、rbファイルの保存時に自動でformatされるようになります。linterはSolargraphに担当してもらうため、空配列を指定することでRuby LSPの機能を無効にしました。

VSCode rdbg Ruby Debugger

  1. gemでdebugをインストールします
    gem install debug
    
  2. VS codeでVSCode rdbg Ruby Debuggerをインストールします
    image.png
  3. VSCode rdbg Ruby Debuggerの設定で、Use bundlerにチェックをいれておきます。

以上で環境が整いました。VSCodeを再起動しましょう。

プロジェクトディレクトリの作成

適当な場所に新しくディレクトリを作成し、VS codeで開きましょう。
今回は、HelloWorldProjectという名のディレクトリを作成し、プロジェクトディレクトリとすることにしました。

bundlerの導入

rubyでは、外部のライブラリであるgemを複数使うことが多いですが、gem同士の互換性の問題が出てくることがあります。そこで、すべてのgemを管理してもらうために、bundlerを導入します。

  1. gemでbundlerをインストールします
    gem install bundler
    
  2. 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に注意されたからです。

実行結果

Hello Worldが出力されました。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0