LoginSignup
5
0

More than 3 years have passed since last update.

休日にRuby を Hack してきました!

Last updated at Posted at 2019-07-23

こんにちはー。初めまして、yuikと申します。

えー、みなさん、いかがお過ごしでしょうか。自分は暑すぎてバテてます...😅

Ruby Hack Challenge Holiday #5に参加してきましたので!やってきたことを記事にまとめました!!

作業する環境
VPSのUbuntu18.04にsshでつないで作業
いつもはvagrant+VirtualBoxでUbuntu環境を構築しているのですが、諸事情により今回会場に持ってきたPCにvagrant+VirtualBoxでUbuntu環境を構築できていなかったので、VPSを使いました(VPSを好奇心により契約していて助かった!!

この記事で関係する言語 : Ruby,C

今回のRHCでやったこと

1.MRI のソースコードを clone
2.MRI のビルド、およびインストール
3.ビルドした Ruby でプログラムを実行
4.バージョン表記を変更してみよう
です。

*MRIとは、 Matz Ruby Interpreter のこと

まずはじめに、

Ubuntuにgit、ruby、autoconf、bison、gcc (or clang, etc)、make が入っていなかったので、
$ sudo apt-get install git ruby autoconf bison gcc make zlib1g-dev libffi-dev libreadline-dev libgdbm-dev libssl-dev
この↑コマンドで一気にインストールする
インストールできたら

MRI のソースコードを clone

手順
1.$ mkdir workdir~/workdirを作成します
2.$ cd workdir~/workdirに移動します
3.$ git clone https://github.com/ruby/ruby.git
このコマンドを実行したら、~/workdir/ruby にソースコードが clone されます

MRI のビルド、およびインストール

1.$ cd workdir/ ~/workdir に移動します
2.$ cd ruby ~/workdir/ruby に移動します
3.$ autoconfconfigure スクリプトの生成
4.$ cd ..~/workdirに移動します
5.$ mkdir build ~/workdir/build を作成します
6.$ cd build
7.$ ../ruby/configure --prefix=$PWD/../install --enable-sharedこのコマンドにどんな意味があるのかわかってないです...申し訳ない😢
8.$ make -j ビルドします。-j は並列にコンパイルなどを行うオプションです。
9.$ make installこの時点で、../install、つまり ~/workdir/install に諸々インストールできました。

ビルドした Ruby でプログラムを実行してみよう!!

miniruby で実行しよう

まずはじめに ~/workdir/build の中に$ touch test.rbでtest.rbファイルを作ります。

スクリーンショット 2019-07-20 14.57.54.png
スクリーンショット 2019-07-20 15.07.43.png
vimでtest.rbを開いて、RubyでHello Worldを書く

Hello Worldのコードが書けたら./miniruby test.rbで実行
スクリーンショット 2019-07-20 14.57.53.png
今回ビルドしたRubyで、Hello Worldのプログラムが実行できた!!🎉🎉🎉

Rubyのソースコードをいじってみよう

Rubyのソースコードをいじってみようってことで、まずは

スクリーンショット 2019-07-20 16.22.39.png
~/workdir/build内のmain.cをvimで開いて、最初のmain関数のところに printf("begin\n"); と書く
書いたら make run (実行) させる、
スクリーンショット 2019-07-20 16.07.41.png

できた!!
いま何をやったかというと、make runした時にはじめにbeginと出力させてから改行して、RubyのHello Worldのコードを実行させるという処理を書きました!!

スクリーンショット 2019-07-20 16.22.39.png
main.cファイルの下の行の方にあるruby_sysinit~~~みたいに書いてある方にはprintf("end\n");と書いてみました。
スクリーンショット 2019-07-20 16.29.36.png
実行結果はこちらです、しっかりendと出力できてます!!

バージョン表記の修正をしてみよう

実際に Ruby を修正してみます。
ruby -v(もしくは ./miniruby -v)を実行したときに、自分のRubyだとわかるように、何か表示を変えてみます。
1.~/workdir/rubyの中にある、version.cファイルをvimで開きます。
スクリーンショット 2019-07-21 18.16.29.png
2.ruby_show_version()という関数が怪しいと教材に書いてありましたので、そこに目を向けます。
3.fflush() が、出力を確定する(出力バッファを吐き出す) C の関数なので、この前に何らかの出力をすれば良いとのこと。
スクリーンショット 2019-07-21 18.19.41.png
4.書くのはなんでもいいとのことなので、fflush(stdout);の上の行にprintf("yuik-no-Ruby\n");と書きました。
5.$ mv version.c ../build/でversion.cを~/workdir/Rubyから~/workdir/buildに移動させる。
5.保存したら$ make minirubyでビルドします。
6.$ ./miniruby -vで結果を確認します。
スクリーンショット 2019-07-21 18.40.07.png
お!!!yuik-no-Rubyって表示されてる!!
やったー!!!🎉🎉🎉

今回覚えた豆知識的なもの

スクリーンショット 2019-07-21 16.48.39.png
例えば~/workdir/rubyに今いるとする、それで~/workdirに移動したくなったらcd ..とコマンドを打つと
スクリーンショット 2019-07-21 16.51.36.png
簡単に~/workdirに移動できる!!
スクリーンショット 2019-07-21 17.01.39.png
こんな感じでcd buildって打つだけで、簡単に~/workdir/buildに移動できる!!自分はいつも、cd ~/workdir/buildみたいに全部打ち込んでました...。(この歴史的発見をした感、伝われ..!!)

mvコマンドを覚えました!!

$ mv version.c ../build/でversion.cを~/workdir/Rubyから~/workdir/buildに移動させる。
スクリーンショット 2019-07-21 18.30.38.png
すごい..~/workdir/buildでlsして確認すると移動できとる..!前に教材で勉強したけど、覚えられてなかったんですよねー、コマンド系って実際必要になってから使う場面が来ると覚えられる気がします((

tabキーの使い方を覚えました!!

例えば~/workdir/rubyのなかのmain.cファイルをvimで編集したいってなったとします、いつもはvim main.cと打っていたのですが、vim mと打ってtabキーを押すと
スクリーンショット 2019-07-21 18.04.28.png
こんな感じで、最初にmがつくファイルの候補がいくつか出てくる!!これは歴史的大発見だ!!

このような便利なコマンドを、教えていただきました! ありがとうございました!!

今回のまとめ

Rubyをビルドできたことや自分のRubyを作れたことに感動しました。
初歩的なコマンドとかの使い方を知らなかったのですが、詳しく教えていただいて、すごく勉強になりました!
ありがとうございました!!

記事について

https://github.com/ko1/rubyhackchallenge/blob/master/JA/2_mri_structure.md ← こちらの記事を引用させていただいている部分があります。
引用部分と自分の言葉の部分が混ざってしまいました。イベントが終わった後にko1さんに聞きに言ったら、今回はこのままでいいよ、とko1さんに言っていただきましたのでこのまま投稿します。次からは引用する部分と自分の言葉の部分を分けたいと思います。

初めて記事を書いたので、読みにくい部分やわかりにくかった部分もあると思いますが、最後まで読んでいただきありがとうございました!!

先に謝っておきますが、間違ったことを書いていたら本当に申し訳ありません!!!

間違ったことを言っていても、許してください!!!
今回学んだことを生かして、プログラミングを頑張ります!!
5
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
5
0