oss-gate / workshop

OSSの開発に未参加または参加したことはあるけどまだ自信がない人を後押しするワークショップ用のリポジトリー
124 stars 547 forks source link

OSS Gate Workshop: online: 2021-10-30: neutral2010: mruby: Work log #1497

Closed neutral2010 closed 2 years ago

neutral2010 commented 2 years ago

This is a work log of a "OSS Gate workshop". "OSS Gate workshop" is an activity to increase OSS developers. Here's been discussed in Japanese. Thanks.

作業ログ作成時の説明

以下のテンプレートを埋めてタイトルに設定します。埋め方例はスクロールすると見えてきます。

OSS Gate Workshop: ${LOCATION}: ${YEAR}-${MONTH}-${DAY}: ${ACCOUNT_NAME}: ${OSS_NAME}: Work log

タイトル例↓:

OSS Gate Workshop: Tokyo: 2017-01-16: kou: Rabbit: Work log

OSS Gateワークショップ関連情報

yuseitahara commented 2 years ago

サポーターの田原です。よろしくお願いします。

neutral2010 commented 2 years ago

OSSを決める

サポーターに相談。

mrubyがOSSか確かめる。

公式サイトを見れば良いのか?GitHubを見れば良いのか?

先に見つかったのはGitHubのここ https://github.com/mruby/mruby そこから、GitHubのmrubyトップページを見る。https://github.com/mruby そこから、mrubyの公式ページを見る。https://mruby.org/docs/ ライセンスがありそうなページを探す。 →見つかった。DocumentationのAPI docsリンクの先 https://mruby.org/docs/api/の9 Licenseリンクに記載 mruby is released under the MIT License. https://github.com/mruby/mruby/blob/master/LICENSE にリンクされていた。

https://opensource.org/licenses/alphabetical で、OSSであることを確認

neutral2010 commented 2 years ago

ユーザーとして動かす

mruby is the lightweight implementation of the Ruby language complying with part of the ISO standard. mruby can be linked and embedded within your application.

どうやればいいのか全然分からない。ので、サポーターさんに質問。 「何を(どこを)参考にすれば良いのか?」 https://github.com/mruby/mruby の「README.mdを見て、順番にやってみましょう。」

書いてあること・言葉の意味

ソースコードをダウンロードして、コンパイルする(使えるようにする。)← OSSではありがちなこと。cf homebrewでやってくれていること/バイナリファイル(既に使いやすくなっているファイルのこと)

1) How to get mruby

ソースコードをダウンロードすることに関して

2) How to compile, test, and install (mruby and gems)

コンパイルの仕方

3) Building documentation

上記1)2)ができた上で行う作業。 documentationとは、mruby APIでできることが、ズラ〜っと書いてある。それを作る作業。

Linuxの方が良いかも? コンパイルについての説明 https://github.com/mruby/mruby/blob/master/doc/guides/compile.md で、Macでも大丈夫なようなので、今日のところはこのままMacで続行。(最終的には、Linuxでも動かしたい。)

neutral2010 commented 2 years ago

You can also install and compile mruby using ruby-install, ruby-build or rvm. に沿ってやってみようかとご相談してみた。どれもこれまで使ったことのない、コマンドラインツールだし、、、 やっぱり、README.mdに沿ってやってみることに。

~/projects/oss
❯ git clone https://github.com/mruby/mruby.git
Cloning into 'mruby'...
remote: Enumerating objects: 66321, done.
remote: Counting objects: 100% (1875/1875), done.
remote: Compressing objects: 100% (685/685), done.
remote: Total 66321 (delta 1121), reused 1805 (delta 1101), pack-reused 64446
Receiving objects: 100% (66321/66321), 17.97 MiB | 1.32 MiB/s, done.
Resolving deltas: 100% (41525/41525), done.
neutral2010 commented 2 years ago

compile.md に沿った作業

Prerequisites

必要なコマンドがあるかどうか確認

❯ gcc
clang: error: no input files

~/projects/oss
❯ ar
usage:  ar -d [-TLsv] archive file ...
    ar -m [-TLsv] archive file ...
    ar -m [-abiTLsv] position archive file ...
    ar -p [-TLsv] archive [file ...]
    ar -q [-cTLsv] archive file ...
    ar -r [-cuTLsv] archive file ...
    ar -r [-abciuTLsv] position archive file ...
    ar -t [-TLsv] archive [file ...]
    ar -x [-ouTLsv] archive [file ...]

~/projects/oss
❯ ruby
ruby -^Cruby: Interrupt

~/projects/oss 16s
❯ brew install bison
Updating Homebrew...
==> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256:0cb1cc7af109437fe0e020c9f3b7b95c3c709b140bde9f991ad2c1433496dd42
######################################################################### 100.0%
==> Pouring portable-ruby-2.6.8.yosemite.bottle.tar.gz
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
all-repos           copier              ld-find-code-refs   nsh
charmcraft          datafusion          libsigrok           sextractor
clang-format@11     gitlab-ci-local     mdzk
cloudiscovery       iputils             ncnn
==> Updated Formulae
Updated 2738 formulae.
==> New Casks
blender-benchmark   keycombiner         otto-matic          topnotch
bugdom              mightymike          scatter             trackerzapper
fmail               mural               tev
gitdock             nanosaur            threema
==> Updated Casks
Updated 302 casks.
==> Deleted Casks
anzeigenchef               breakaway                  refined-github-safari
archi                      collabshot                 silverlight
bearychat                  cytoscape                  tuntap
blooo                      fritzing                   zipcleaner

==> Downloading https://ghcr.io/v2/homebrew/core/bison/manifests/3.8.2
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/bison/blobs/sha256:a4fa1a0bf324
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Pouring bison--3.8.2.big_sur.bottle.tar.gz
==> Caveats
bison is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have bison first in your PATH, run:
  echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.zshrc

For compilers to find bison you may need to set:
  export LDFLAGS="-L/usr/local/opt/bison/lib"

==> Summary
🍺  /usr/local/Cellar/bison/3.8.2: 99 files, 3.7MB

~/projects/oss 1m 4s
❯ echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.zshrc

~/projects/oss
❯ echo 'export LDFLAGS="-L/usr/local/opt/bison/lib"' >> ~/.zshrc       
neutral2010 commented 2 years ago

~/projects/oss ❯ ls mruby

~/projects/oss ❯ cd mruby

~/projects/oss/mruby master ❯ ls AUTHORS SECURITY.md lib CODEOWNERS TODO.md minirake CONTRIBUTING.md appveyor.yml mrbgems Doxyfile benchmark mrblib LEGAL build_config mruby-source.gemspec LICENSE build_config.rb oss-fuzz Makefile codespell.txt src NEWS doc super-linter.report README.md examples tasks Rakefile include test

~/projects/oss/mruby master

Build

❯ rake
CPP   src/array.c -> build/host/src/array.pi
CPP   src/backtrace.c -> build/host/src/backtrace.pi
CPP   src/cdump.c -> build/host/src/cdump.pi
CPP   src/class.c -> build/host/src/class.pi
.
.
.
Build summary:

================================================
      Config Name: host
 Output Directory: build/host
         Binaries: mrbc, mruby-config
    Included Gems:
             mruby-array-ext - Array class extension
             mruby-bin-config - mruby-config command
             mruby-bin-mirb - mirb command
               - Binaries: mirb
             mruby-bin-mrbc - mruby compiler executable
             mruby-bin-mruby - mruby command
               - Binaries: mruby
             mruby-bin-strip - irep dump debug section remover command
               - Binaries: mruby-strip
             mruby-class-ext - class/module extension
             mruby-compar-ext - Enumerable module extension
             mruby-compiler - mruby compiler library
             mruby-complex - Complex class
             mruby-enum-ext - Enumerable module extension
             mruby-enum-lazy - Enumerator::Lazy class
             mruby-enumerator - Enumerator class
             mruby-eval - standard Kernel#eval method
             mruby-fiber - Fiber class
             mruby-hash-ext - Hash class extension
             mruby-io - IO and File class
             mruby-kernel-ext - extensional function-like methods
             mruby-math - standard Math module
             mruby-metaprog - Meta-programming features for mruby
             mruby-method - Method and UnboundMethod class
             mruby-numeric-ext - Numeric class extension
             mruby-object-ext - extensional methods shared by all objects
             mruby-objectspace - ObjectSpace class
             mruby-pack - Array#pack and String#unpack method
             mruby-print - standard print/puts/p
             mruby-proc-ext - Proc class extension
             mruby-random - Random class
             mruby-range-ext - Range class extension
             mruby-rational - Rational class
             mruby-socket - standard socket class
             mruby-sprintf - standard Kernel#sprintf method
             mruby-string-ext - String class extension
             mruby-struct - standard Struct class
             mruby-symbol-ext - Symbol class extension
             mruby-time - standard Time class
             mruby-toplevel-ext - toplevel object (main) methods extension
================================================

================================================
      Config Name: host/mrbc
 Output Directory: build/host/mrbc
         Binaries: mrbc
    Included Gems:
             mruby-bin-mrbc - mruby compiler executable
             mruby-compiler - mruby compiler library
================================================
neutral2010 commented 2 years ago
~/projects/oss/mruby master 1m 27s
❯ rake test

Build summary:

================================================
      Config Name: host
 Output Directory: build/host
         Binaries: mrbc, mruby-config
    Included Gems:
             mruby-array-ext - Array class extension
             mruby-bin-config - mruby-config command
             mruby-bin-mirb - mirb command
               - Binaries: mirb
             mruby-bin-mrbc - mruby compiler executable
             mruby-bin-mruby - mruby command
               - Binaries: mruby
             mruby-bin-strip - irep dump debug section remover command
               - Binaries: mruby-strip
             mruby-class-ext - class/module extension
             mruby-compar-ext - Enumerable module extension
             mruby-compiler - mruby compiler library
             mruby-complex - Complex class
             mruby-enum-ext - Enumerable module extension
             mruby-enum-lazy - Enumerator::Lazy class
             mruby-enumerator - Enumerator class
             mruby-eval - standard Kernel#eval method
             mruby-fiber - Fiber class
             mruby-hash-ext - Hash class extension
             mruby-io - IO and File class
             mruby-kernel-ext - extensional function-like methods
             mruby-math - standard Math module
             mruby-metaprog - Meta-programming features for mruby
             mruby-method - Method and UnboundMethod class
             mruby-numeric-ext - Numeric class extension
             mruby-object-ext - extensional methods shared by all objects
             mruby-objectspace - ObjectSpace class
             mruby-pack - Array#pack and String#unpack method
             mruby-print - standard print/puts/p
             mruby-proc-ext - Proc class extension
             mruby-random - Random class
             mruby-range-ext - Range class extension
             mruby-rational - Rational class
             mruby-socket - standard socket class
             mruby-sprintf - standard Kernel#sprintf method
             mruby-string-ext - String class extension
             mruby-struct - standard Struct class
             mruby-symbol-ext - Symbol class extension
             mruby-time - standard Time class
             mruby-toplevel-ext - toplevel object (main) methods extension
================================================

================================================
      Config Name: host/mrbc
 Output Directory: build/host/mrbc
         Binaries: mrbc
    Included Gems:
             mruby-bin-mrbc - mruby compiler executable
             mruby-compiler - mruby compiler library
================================================

CC    mrbgems/mruby-test/driver.c -> build/host/mrbgems/mruby-test/driver.o
CC    mrbgems/mruby-test/vformat.c -> build/host/mrbgems/mruby-test/vformat.o
GEN   build/host/mrbgems/mruby-test/mrbtest.c 
.
.
.
gem_test.o
AR    build/host/mrbgems/mruby-test/mrbtest.a 
ar: creating archive /Users/usagi/projects/oss/mruby/build/host/mrbgems/mruby-test/mrbtest.a
LD    build/host/bin/mrbtest 
INSTALL build/host/bin/mrbtest -> bin/mrbtest
>>> Test host <<<
mrbtest - Embeddable Ruby Test

.......................................................................................................................................................................?..........................................................................................................?.................................................................................................................................................?.................................................................................................................................................................................................................................................................................................................??.............................................................................................................................................................................................................................................................??......................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Skip: Proc#source_location (mrbgems: mruby-proc-ext)
Skip: Kernel.caller, Kernel#caller => backtrace isn't available (mrbgems: mruby-kernel-ext)
Skip: File.expand_path (with ENV) (mrbgems: mruby-io)
Skip: Method#source_location (mrbgems: mruby-method)
Skip: UnboundMethod#source_location (mrbgems: mruby-method)
Skip: GC in rescue => backtrace isn't available (core)
Skip: Method call in rescue => backtrace isn't available (core)
  Total: 1437
     OK: 1430
     KO: 0
  Crash: 0
Warning: 0
   Skip: 7
   Time: 0.32 seconds

>>> Bintest host <<<
bintest - Command Binary Test

.............................................................
  Total: 61
     OK: 61
     KO: 0
  Crash: 0
Warning: 0
   Skip: 0
   Time: 1.74 seconds
yuseitahara commented 2 years ago

これを試してみたら、何かフィードバックポイントがあるかもしれません。

https://mruby.org/docs/articles/executing-ruby-code-with-mruby.html

neutral2010 commented 2 years ago

すみません、今気がつきました ↑

piroor commented 2 years ago

Source code (.rb)

https://github.com/mruby/mruby.github.io/blob/master/docs/articles/executing-ruby-code-with-mruby.md#source-code-rb のところのサンプルがこうなっていると誤解が減りそう(ファイルがどこにあるのか、ファイルの内容が何なのか誤解の余地が減る)

$ cat test_program.rb
puts 'hello world'
$ mruby/bin/mruby test_program.rb
hello world
yuseitahara commented 2 years ago

問題のウェブページのソースはここですね。

https://github.com/mruby/mruby.github.io/blob/master/docs/articles/executing-ruby-code-with-mruby.md

piroor commented 2 years ago

https://mruby.org/docs/articles/executing-ruby-code-with-mruby.html から https://github.com/mruby/mruby.github.io/ への誘導があると嬉しいかも

neutral2010 commented 2 years ago

https://mruby.org/docs/articles/executing-ruby-code-with-mruby.html 4つのやり方を試してみる。 フィードバックポイントなのでは?

neutral2010 commented 2 years ago
~/projects/oss/mruby master 13s
❯ mruby/bin/mirb
mirb - Embeddable Interactive Ruby Shell
zsh: no such file or directory: mruby/bin/mirb
zsh: command not found: mirb

~/projects/oss/mruby master
❯ ls
AUTHORS         TODO.md         lib
CODEOWNERS      appveyor.yml        minirake
CONTRIBUTING.md     benchmark       mrbgems
Doxyfile        bin         mrblib
LEGAL           build           mruby-source.gemspec
LICENSE         build_config        oss-fuzz
Makefile        build_config.rb     src
NEWS            codespell.txt       super-linter.report
README.md       doc         tasks
Rakefile        examples        test
SECURITY.md     include

~/projects/oss/mruby master
❯ touch test_program.rb

~/projects/oss/mruby master*
❯ vim test_program.rb 

~/projects/oss/mruby master* 26s
❯ cat test_program.rb 

puts 'hello world'

~/projects/oss/mruby master*
❯ mruby/bin/mrbc test_program.rb
zsh: no such file or directory: mruby/bin/mrbc

~/projects/oss/mruby master*
❯ ls
AUTHORS         TODO.md         lib
CODEOWNERS      appveyor.yml        minirake
CONTRIBUTING.md     benchmark       mrbgems
Doxyfile        bin         mrblib
LEGAL           build           mruby-source.gemspec
LICENSE         build_config        oss-fuzz
Makefile        build_config.rb     src
NEWS            codespell.txt       super-linter.report
README.md       doc         tasks
Rakefile        examples        test
SECURITY.md     include         test_program.rb

~/projects/oss/mruby master*
❯ cd bin/mrbc
cd: not a directory: bin/mrbc

~/projects/oss/mruby master*
❯ cd bin

~/projects/oss/mruby/bin master*
❯ ls
mirb        mrbtest     mruby-config
mrbc        mruby       mruby-strip

~/projects/oss/mruby/bin master*
❯ mruby/bin/mrbc test_program.rb
zsh: not a directory: mruby/bin/mrbc

~/projects/oss/mruby/bin master*
❯ ls                            
mirb        mrbtest     mruby-config
mrbc        mruby       mruby-strip

~/projects/oss/mruby/bin master*
❯ mirb
zsh: command not found: mirb

~/projects/oss/mruby/bin master*
❯ ./mirb
mirb - Embeddable Interactive Ruby Shell

> puts 'hello world'
hello world
 => nil
> exit

~/projects/oss/mruby/bin master* 1m 57s
❯ mruby/bin/mruby test_program.rb
zsh: not a directory: mruby/bin/mruby

~/projects/oss/mruby/bin master*
❯ pwd
/Users/usagi/projects/oss/mruby/bin

~/projects/oss/mruby/bin master*
❯ touch test_program.rb

~/projects/oss/mruby/bin master*
❯ vim test_program.rb 

~/projects/oss/mruby/bin master* 24s
❯ mruby/bin/mruby test_program.rb
zsh: not a directory: mruby/bin/mruby

~/projects/oss/mruby/bin master*
❯ ./mruby test_program.rb 
test_program.rb:1: undefined method 'world' (NoMethodError)

~/projects/oss/mruby/bin master*
❯ cd ../

~/projects/oss/mruby master*
❯ cd../
zsh: no such file or directory: cd../

~/projects/oss/mruby master*
❯ pwd
/Users/usagi/projects/oss/mruby

~/projects/oss/mruby master*
❯ mruby/bin/mruby test_program.rb
zsh: no such file or directory: mruby/bin/mruby

~/projects/oss/mruby master*
❯ ./mruby/bin/mruby test_program.rb
zsh: no such file or directory: ./mruby/bin/mruby

~/projects/oss/mruby master*
❯ ls
AUTHORS         TODO.md         lib
CODEOWNERS      appveyor.yml        minirake
CONTRIBUTING.md     benchmark       mrbgems
Doxyfile        bin         mrblib
LEGAL           build           mruby-source.gemspec
LICENSE         build_config        oss-fuzz
Makefile        build_config.rb     src
NEWS            codespell.txt       super-linter.report
README.md       doc         tasks
Rakefile        examples        test
SECURITY.md     include         test_program.rb

~/projects/oss/mruby master*
❯ rm test_program.rb 

~/projects/oss/mruby master
❯ ls
AUTHORS         TODO.md         lib
CODEOWNERS      appveyor.yml        minirake
CONTRIBUTING.md     benchmark       mrbgems
Doxyfile        bin         mrblib
LEGAL           build           mruby-source.gemspec
LICENSE         build_config        oss-fuzz
Makefile        build_config.rb     src
NEWS            codespell.txt       super-linter.report
README.md       doc         tasks
Rakefile        examples        test
SECURITY.md     include

~/projects/oss/mruby master
❯ mruby/bin/mruby test_program.rb
zsh: no such file or directory: mruby/bin/mruby

~/projects/oss/mruby master
❯ ls
AUTHORS         TODO.md         lib
CODEOWNERS      appveyor.yml        minirake
CONTRIBUTING.md     benchmark       mrbgems
Doxyfile        bin         mrblib
LEGAL           build           mruby-source.gemspec
LICENSE         build_config        oss-fuzz
Makefile        build_config.rb     src
NEWS            codespell.txt       super-linter.report
README.md       doc         tasks
Rakefile        examples        test
SECURITY.md     include

~/projects/oss/mruby master
❯ cd bin

~/projects/oss/mruby/bin master
❯ ls
mirb        mrbtest     mruby-config    test_program.rb
mrbc        mruby       mruby-strip

~/projects/oss/mruby/bin master
❯ ls -l
total 14208
-rwxr-xr-x  1 usagi  staff  1480584 10 30 14:29 mirb
-rwxr-xr-x  1 usagi  staff   849944 10 30 14:29 mrbc
-rwxr-xr-x  1 usagi  staff  1964480 10 30 14:39 mrbtest
-rwxr-xr-x  1 usagi  staff  1479800 10 30 14:29 mruby
-rwxr-xr-x  1 usagi  staff     1389 10 30 14:29 mruby-config
-rwxr-xr-x  1 usagi  staff  1481640 10 30 14:29 mruby-strip
-rw-r--r--  1 usagi  staff       12 10 30 15:24 test_program.rb

~/projects/oss/mruby/bin master
❯ ./mruby test_program.rb
test_program.rb:1: undefined method 'world' (NoMethodError)

~/projects/oss/mruby/bin master
❯ cat test_program.rb 
hello world
github-actions[bot] commented 2 years ago

おつかれさまでした!

ワークショップの終了にともないissueを閉じますが、このまま作業メモとして使っても構いません :ok_hand:

ワークショップの感想を集めています!

ブログなどに書かれた際は、このページへリンクの追加をお願いします :pray:

またの参加をお待ちしています!