「はじめに」「コマンド」を読む
コマンドは色々あって奥が深そう。
情報源
気になった所をピックアップ
これまで学習してきたことの繰り返し。
- オブジェクト指向言語
- Perlより見やすい
- Lispより括弧が少ない
- インタプリタ
- 動的型付け
- GC
- クラス、継承、メソッド、特異メソッド、Mixin
- クロージャ(イテレータ、ブロック、Proc、Lambda)
コマンド | 概要 |
---|---|
erb | 埋め込みRuby処理ツール。テンプレートエンジン。 |
gem | Rubyのパッケージ管理ツール。 |
irb | Ruby の対話インタフェース。REPL。 |
rake | Ruby の内部 DSL で記述するビルドツール。タスクツール。 |
rdoc | Ruby のソースファイルからドキュメントを生成するツール。 |
ri |
RDoc で書かれた Ruby のドキュメントをコマンドラインから閲覧するツール。 |
ruby | Ruby 本体。 |
erb
テンプレート用言語。
用語 | 概要 |
---|---|
eRuby |
任意のテキストファイルに Ruby スクリプトを埋め込む書式の仕様 |
eruby |
前田修吾さん作のeRuby の C による実装 |
ERB |
関将俊さん作のeRuby の Ruby による実装 |
ERb |
ERB が標準添付になる前のバージョン (ERb と ERbLight があった) |
Erubis |
ERB の高速化と高機能化のために開発された |
Erubi |
Erubis からフォークされた。さらなる高速化と機能削ぎ落とし。 |
eRuby
が仕様としての正式名称らしい。その処理系としてERB
が標準っぽい。Rubyをインストールすると一緒に入る。Ruby on RailsではErubi
が使われているようだ。
ERB
を触ってみる
a.erb
<ul> % [1,2,3].each do |i| <li><%=i%></li> % end </ul>
erb a.erb
<ul> <li>1</li> <li>2</li> <li>3</li> </ul>
rake
ビルドツール。テスト、gem化、圧縮ファイル化、rdoc生成の処理をコーディングする。rakeを読めばいいのだろうが大変そう。ざっとみた感じ、ビルドツールというよりタスクツールにみえる。
Rails5からrakeタスクがrailsコマンドに統一された。
Ruby on Railsでは別コマンドらしい。マジかよ。
ていうか、RubyというだけでRailsの情報しか出てこない。辟易とする。まだRails触ったことないのに。
触ってみる
テストを自動化してみる。
rakefileだけ抜粋する。
require 'rake/testtask' require 'rake/clean' task :default => [:test] desc 'Run test_unit based test' Rake::TestTask.new do |t| t.libs << "test" t.test_files = Dir["../test/**/test_*.rb"] t.verbose = true end
ri
Rubyのマニュアル。
$ ri Enter the method name you want to look up. You can use tab to autocomplete. Enter a blank line to exit. >>
検索するメソッド名を入力します。 タブを使用してオートコンプリートできます。 空白行を入力して終了します。
いや、まずどんなクラスやメソッドがあるかを知りたいんですけど? その一覧はできなんですか? あと構文の説明が最初にほしいんですけど? ないの?
>> syntax Nothing known about .syntax
構文の説明はないっぽいね。APIリファレンスみたいな感じなのかな?
>> class
= .class (from ruby core) === Implementation from Kernel ------------------------------------------------------------------------ obj.class -> class ------------------------------------------------------------------------ Returns the class of obj. This method must always be called with an explicit receiver, as #class is also a reserved word in Ruby. 1.class #=> Integer self.class #=> Object (from ruby core) === Implementation from PredefinedKey ------------------------------------------------------------------------ class() ------------------------------------------------------------------------ Fake #class method for Registry#open, Registry#create
q
で戻る。j
で下、d
で上へスクロール。vim系の操作方法。
大文字でClass
とやるとclass
メソッドでなくClass
クラスの説明になったっぽい。Class
クラスなんて存在するのか知らんけど。
>> Class
= Class < Module (from ruby core) ------------------------------------------------------------------------ Extends any Class to include json_creatable? method. Classes in Ruby are first-class objects---each is an instance of class Class. Typically, you create a new class by using: class Name # some code describing the class behavior end When a new class is created, an object of type Class is initialized and assigned to a global constant (Name in this case). When Name.new is called to create a new object, the #new method in Class is run by default. This can be demonstrated by overriding #new in Class: class Class alias old_new new def new(*args) print "Creating a new ", self.name, "\n" old_new(*args) end end class Name end n = Name.new produces: Creating a new Name Classes, modules, and objects are interrelated. In the diagram that follows, the vertical arrows represent inheritance, and the parentheses metaclasses. All metaclasses are instances of the class `Class'. +---------+ +-... | | | BasicObject-----|-->(BasicObject)-------|-... ^ | ^ | | | | | Object---------|----->(Object)---------|-... ^ | ^ | | | | | +-------+ | +--------+ | | | | | | | | Module-|---------|--->(Module)-|-... | ^ | | ^ | | | | | | | | Class-|---------|---->(Class)-|-... | ^ | | ^ | | +---+ | +----+ | | obj--->OtherClass---------->(OtherClass)-----------... ------------------------------------------------------------------------ = Class methods: new = Instance methods: allocate, inherited, json_creatable?, new, superclass
BasicObject
, Object
, Module
, Class
というキーワードが出てきた。あと、コンテナとしてArray
とHash
がある。そのあたりを読んでおけばいいんじゃないかな? とくにArray
はかなり参考になった。
ri -h
ログ
Usage: ri [options] [name ...] Where name can be: Class | Module | Module::Class Class::method | Class#method | Class.method | method gem_name: | gem_name:README | gem_name:History All class names may be abbreviated to their minimum unambiguous form. If a name is ambiguous, all valid options will be listed. A '.' matches either class or instance methods, while #method matches only instance and ::method matches only class methods. README and other files may be displayed by prefixing them with the gem name they're contained in. If the gem name is followed by a ':' all files in the gem will be shown. The file name extension may be omitted where it is unambiguous. For example: ri Fil ri File ri File.new ri zip ri rdoc:README Note that shell quoting or escaping may be required for method names containing punctuation: ri 'Array.[]' ri compact\! To see the default directories ri will search, run: ri --list-doc-dirs Specifying the --system, --site, --home, --gems, or --doc-dir options will limit ri to searching only the specified directories. ri options may be set in the RI environment variable. The ri pager can be set with the RI_PAGER environment variable or the PAGER environment variable. Options: -i, --[no-]interactive In interactive mode you can repeatedly look up methods with autocomplete. -a, --[no-]all Show all documentation for a class or module. -l, --[no-]list List classes ri knows about. --[no-]pager Send output to a pager, rather than directly to stdout. -T Synonym for --no-pager. -w, --width=WIDTH Set the width of the output. --server[=PORT] Run RDoc server on the given port. The default port is 8214. -f, --format=NAME Use the selected formatter. The default formatter is bs for paged output and ansi otherwise. Valid formatters are: ansi, bs, markdown, rdoc. -h, --help Show help and exit. -v, --version Output version information and exit. Data source options: --[no-]list-doc-dirs List the directories from which ri will source documentation on stdout and exit. -d, --doc-dir=DIRNAME List of directories from which to source documentation in addition to the standard directories. May be repeated. --no-standard-docs Do not include documentation from the Ruby standard library, site_lib, installed gems, or ~/.rdoc. Use with --doc-dir. --[no-]system Include documentation from Ruby's standard library. Defaults to true. --[no-]site Include documentation from libraries installed in site_lib. Defaults to true. --[no-]gems Include documentation from RubyGems. Defaults to true. --[no-]home Include documentation stored in ~/.rdoc. Defaults to true. Debug options: --[no-]profile Run with the ruby profiler. --dump=CACHE Dump data from an ri cache or data file.
ri -l
引数の一覧。これだよ、これが欲しかったんだ!
Classes and Modules known to ri:
ACL
ACL::ACLEntry
ACL::ACLList
ARGF
Abbrev
Addrinfo
ArgumentError
Array
Base64
BasicObject
BasicSocket
Benchmark
Benchmark::Tms
BigDecimal
BigMath
Binding
Bundler
CGI
CGI::Cookie
CGI::Escape
CGI::HTML3
CGI::HTML4
CGI::HTML4Fr
CGI::HTML4Tr
CGI::HTML5
CGI::HtmlExtension
CGI::InvalidEncoding
CGI::QueryExtension
CGI::Session
:
ri -f markdown
ri -f markdown Class
見出しが#
になる程度だった。
所感
コマンドについては流し読みする。細かく使いこなそうとするのはずっと後でいい。というか、その必要性が出てからでいい。「何ができるのか」だけ把握しておけばいい。「これは便利」と思えたらよしとする。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux