サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
secret-garden.hatenablog.com
前日の宣伝になってしまうんですが明日の RubyKaigi 2022 で動的に RBS を生成してみた話をします。 Let's collect type info during Ruby running and automaticall - RubyKaigi 2022 内容としては上に書いてある通りなんですが Ruby の実行中に型情報を収集して RBS を生成してみたって内容の話になります。 やったことに対する先出しをすると以下のように Ruby を実行しつつ RBS を出力するような gem をつくりました(つくっています)。 # sample.rb class FizzBuzz def initialize(value) @value = value end def value; @value end def apply value % 15 == 0 ? "FizzBuzz" :
普段何気なく書いている Ruby なんですが実はメソッドの引数の種類って思ったよりも多くてまとめてみました。 実際自分も Ruby の AST をいじっている時に引数の種類が多すぎて混乱したのでまとめておくと色々と役に立つかなーと。 と、軽い気持ちで書いてみたんですが結構なボリュームになってしまいまsた。 引数の名称とかは調べつつ独断と偏見で書いてあるのでそこら辺はご注意ください。 諸注意 この記事は基本的に Ruby 3.1 を元にして動作確認しています 下にも書いてあるんですが 仮引数(parameter) についての解説で 実引数(argument) の話はあんまりでてきません 引数の名称は日本語に寄せていますが Ruby 界隈だと英語で書いてある事が多いかも 調べる時は英語の方で調べてもらったほうが情報はでてくると思う 引数という言葉の意味とは 『引数』という言葉には厳密に言うと『
Ruby Advent Calendar 2021 1日目の記事です。 さてさて今年も Advent Calendar の時期がやってきましたね。 今年の Ruby Advent Calendar はありがたい事に1周目が既に埋まっており、2周目のカレンダーが立っています。 Advent Calendar を書いてみたい方がいればぜひぜひ2周目のカレンダーに登録しましょう!!! と、いう事で1日目の記事なんですが実はいまは11月29日で完全にノープランでこの記事を書いています。 例年だと Advent Calendar を立てる頃にはだいたい書くネタは考えているんですが今年は完全に何も思いついていませんどうしよう。 ところでわたしは OSS 活動の一環として Ruby の標準ライブラリの Reline のコードを読んだりすることがあります。 ただ、Reline のコードってまあまあ読むのが
以前から山のように提案があった Hash のショートハンドが RubyKaigi の感想戦で matz を説得して入ったらしい。 チケット:[Feature #14579] Hash value omission コミット:https://github.com/ruby/ruby/commit/c60dbcd1c55cd77a24c41d5e1a9555622be8b2b8 感想戦のログ:https://hackmd.io/Mmse5ybASq-6c2kQoJQdMQ これによって Ruby 3.1 で Hash が以下のように書くことができます。 name = "homu" age = 14 # { name: name, age: age } のシンタックスシュガー { name:, age: } # => {:name=>"homu", :age=>14} # 一部だけ値を割り当てる
先日 RubyKaigi Takeout 2021 のスピーカーとスケジュールが発表されました。 わたしも 3日目の朝一に Use Macro all the time ~ マクロを使いまくろ ~というタイトルで登壇させていただきます。 内容はタイトルにも書かれている通りマクロの話をします。 マクロと言ってもいわゆる C言語のようなプリプロセスマクロではなくて『AST レベルで Ruby の構文を別の構文へと変換すること』を Ruby のマクロと定義し、Ruby でどのようにマクロを表現するのか、みたいな話をする予定です。 まあもっとさっくりう言うと『Ruby でマクロを実装してみたらこうなりました』みたいな感じですかねえ。 例えばマクロを使用することで、 hoge.foo.bar のようなコードを hoge&.foo&.bar のようにぼっち演算子呼び出しとして変換する事ができたり、 C
タイトルは釣りっぽいんですが Psych v4.0.0 で『 Psych.load が Psych.safe_load を使用するようになった』事で普段利用している YAML.load や YAML.load_file が今後非互換になってしまう、という話です。 この変更により今まで読み込むことができていた YAML ファイルが今後読み込みエラーになる可能性があります。 先にまとめだけ書いておくと Psych v4.0.0 で YAML.load が非互換になる なので既存の YAML データが読み込めずにエラーになる可能性がある もし急に YAML データが読み込めなくなったら Psych のバージョンを確認しよう 回避する場合は YAML.unsafe_load などが利用できる また、この記事の内容は記事を書いた当時の話なので今後変わっているかもしれないので注意してください。 NOT
rbenv で Ruby 2.7 や 3.0 のビルドは問題なかったんですが 2.6 で失敗したのでその対処方法を書いておきます。 rbenv で 2.6.6 をインストールする rbenv で 2.6.6 をインストールしようとしたらエラーになります。 $ rbenv install 2.6.6 Downloading openssl-1.1.1i.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242 Installing openssl-1.1.1i... Installed openssl-1.1.1i to /Users/anzu/.rbenv/versions/2.6.6 Downloading ruby-
Ruby 3.0 Advent Calendar 2020 12日目の記事になります。 昨日は『Win32APIが廃止された』です。 そういえば書いてなかったのでこの機会に書いておきます。 銀座Rails#26 で Ruby 3.0 の話をした 開催されたのは今年の10月でちょっと前になるんですが 銀座Rails#26 で Ruby 3.0 と Ruby 2.7.2 の話をしました。 元々この手の勉強会は自分が LT などをするときのみ参加するようにしてて実際、銀座Rails も今回が初参加でした。 登壇するきっかけとしてはちょうどそのころ Ruby 2.7.2 がリリースされて『非推奨の警告がデフォルトでは出なくなった』という変更が入りました。 この変更はかなり強い変更になるので『いろんなところで周知しておきたいなー』と思っていたところに Twitter で銀座Rails の登壇者を探し
令和時代の基礎文法最速マスター Advent Calendar 2020 1日目の記事になります。 この Advent Calendar は昔流行っていた 基礎文法最速マスター をまたやりたいなあ…という思いからはじめました。 まだ空きはあるので興味があるひとは参加してもらってもいいですし、別に Advent Calendar である必要もないので書きたいひとがいればどんどん書いていくといいと思います! と、言うことで最初のネタは Ruby になります。 この記事は書かれた時点での最新版である Ruby 2.7.2 に準じる形で書いています。 また、過去の Ruby基礎文法最速マスター はこちら になります。 目次 目次 はじめに Ruby のインストール ドキュメント ドキュメントなどでよく書かれる慣習 基礎 実行方法 ファイルから実行 ruby コマンドに直接コードを渡す 対話環境 コ
Ruby Advent Calendar 2020 1日目の記事になります。 もう今年も Advent Calendar の時期ですね。 今年は 12/25日に Ruby 3.0 がリリースされるのでとても楽しみです。 並行して Ruby 3.0 Advent Calendar 2020 も開催しているので興味があるひとはぜひ参加してみてください! Ruby Advent Calendar 2020 もまだ空きはあるのでこっちも参加してね! さて、今年の Advent Calendar は Ruby の AST 周りについて書いてみようかと思います。 【Ruby Advent Calendar 2019】ピュア Ruby で Ruby 2.7 の Numbered parameter を実装してみよう!【1日目】 - Secret Garden(Instrumental) 【Ruby Ad
先日 Ruby 2.7.2 がリリースされました。 Ruby 2.7.2 リリース このリリースで先日お伝えした『非推奨な警告がデフォルトでは出なくなる』ようになりました。 なので、今後は非推奨な機能が削除されるといきなりアプリケーションが動作しなくなる可能性があります。 このような問題を回避するために今後は以下のようにして『明示的に非推奨な警告が出力されるようする』ことで安全に開発する事ができます。 -w や -W:deprecated を付けて Ruby を実行す コード上に Warning[:deprecated] = true を追記する 参照 [Feature #17000] 2.7.2 turns off deprecation warnings by default [Feature #16345] Don't emit deprecation warnings by def
今日 Ruby Hacking Challenge in Hamada.rb に参加したときに ruby_jard という Ruby のデバッグツールを教えてもらいました。 これがかなり凄まじくすごかったのでちょっとまとめてみます。 ruby_jard とは ruby_jard とは Ruby のコードをデバッグするツールになります。 ruby_jard | Just another ruby debugger. Provide a better experience while debugging Ruby rubyjard.org 立ち位置としては byebug のようなデバッグツールになっており、コード上で jard というメソッドを呼び出すとそのタイミングでプロセスが停止して、コンソール上から Ruby のコードを実行できるような形になっています。 実際にどういう形でデバッグするの
Ruby の開発版に右代入演算子と実験的にエンドレスメソッド定義構文が新しく追加されました。 右代入演算子 チケット:https://bugs.ruby-lang.org/issues/15921 pull request:https://github.com/ruby/ruby/pull/3012 左辺値を右辺の変数に代入する => 演算子が新しく追加されました。 これは expression => variable のように書くことができます。 # 左辺値を右辺の変数に代入する 42 => result p result # => 42 # メソッドチェーンの最後に代入演算子を書くことができる (1..).lazy.select { _1 % 2 == 0 }.map { _1 * 2 } => x p x.first(10) # => [4, 8, 12, 16, 20, 24, 2
Ruby Advent Calendar 2019 1日目の記事になります。 本記事では Ruby 2.7 で実装される Numbered parameter っぽい機能をピュアRuby で実装してみたいと思います。 またこの記事の実装は以下の記事を参考にして書いています。 Rubyのブロックつらい問題を解決する暗黙のブロックパラメータ - Qiita 4年以上前にこういうのが書かれていたのすごい。 Numbered parameter とは Numbered parameter、略してナンパラです。 ナンパラは『暗黙的にブロックの引数を参照する構文』になります。 通常ブロックで引数を受け取る場合、仮引数を定義して受け取ります。 # it という名前の仮引数を定義して、それで引数を参照する [1, 2, 3].map { |it| it.to_s + it.to_s } # => ["11
npm install で github のリポジトリを指定してインストールする方法の覚書。 $ npm install osyo-manga/thomash-node-audio-metadata また #{branch 名} を付けることで任意のブランチからインストールすることも出来ます。 $ npm install osyo-manga/thomash-node-audio-metadata#fix-fs_close 便利。 参照 Github上にある最新のnpm packageをインストールする方法 - Qiita
追記 pipeline operator の議論は RubyKaigi 2019 の Ruby Committers vs the World で話が出ていたみたいですね。 www.youtube.com 取り急ぎまとめ。 今日、Ruby の開発者会議に参加させて頂いて、さっき返ってきて ML みてたんですがいつの間にか pipeline operator がマージされていました。 思わず3度ぐらい ML と commit を見直してしまいました。 え、ほんまに??? commit: Add pipeline operator [Feature #15799] · ruby/ruby@f169043 · GitHub issues: Feature #15799: pipeline operator - Ruby trunk - Ruby Issue Tracking System 開発者
Ruby の trunk にパータンマッチ構文が実験的に導入されました。 Introduce pattern matching [EXPERIMENTAL] · ruby/ruby@9738f96 · GitHub Feature #14912: Introduce pattern matching syntax - Ruby trunk - Ruby Issue Tracking System NOTE: 実験的に導入されたので今後仕様が変わる可能性があるので注意してください。 試してみた と、言うことで早速試してみました。 case when と構文が似ていますが『抽象的にマッチしつつ、マッチした値を変数にキャプチャすることが出来る』っていうあたりが違います。 簡単な使用例としてはこんな感じになります。 def func *x case x in [a] -a in [a, b] a
Ruby Advent Calendar 2018 3日目の記事になります。 なんとか日付が変わる前に書けました…。 何を書こうか迷ったんですが、この記事では今年 Ruby にパッチを投げまくったディープな Refinements の世界について書いてみようかと思います。 そもそも皆さん Refinements は使っていますか?どんな機能か知っていますか? まずは Refinements についておさらいしてみましょう。 クラス拡張について Ruby ではオープンクラスに対してメソッドを拡張する事が出来ます。 # Integer クラスに対して後からメソッドを追加する事が出来る class Integer def twice self + self end end # 追加したメソッドは既存のオブジェクトから呼び出すことが出来るようになる p 42.twice # => 84 # クラス
Ruby 2.5 で追加された #yield_self という地味に便利なメソッドがあります。 これは『レシーバを引数としてブロックを呼び出す』というメソッドになります。 既存のメソッドとして #tap と似ていますが、#tap とは異なり『ブロックの戻り値を #yield_self の戻り値として』返します。 # ブロックの引数で yield_self のレシーバを受け取る # #tap とは違いブロックの戻り値が yield_self の戻り値となる p [1, 2, 3].yield_self { |it| it + [4, 5, 6] } # => [1, 2, 3, 4, 5, 6] どういう時に便利なの 例えば、次のように『hash でキーの値が存在すれば任意の処理を行う』というようなコードはよく書くと思います。 def meth opt # 存在するキーの値だけ result
さて、Ruby では refinements 内で mixin したメソッド内から同モジュールのメソッドを呼び出すことはできません。 module Homu def homu p "homu" end def mami homu end end module ObjectEx refine Object do include Homu end end using ObjectEx obj = Object.new obj.mami # => undefined local variable or method `homu' for #<Object:0x0000000271e510> (NameError) [解決] UnboundMethod を経由することで mixin したモジュールのメソッドを呼び出すことができます。 module Homu def homu p "homu" en
Vim script でデバッグ出力を行いたい場合、以下のようなスクリプトを定義しておくことで『変数名:値』みたいな出力をすることが出来ます。 command! -nargs=* \ Debug \ try \| echom <q-args> ":" string(<args>) \| catch \| echom <q-args> \| endtry 使い方 let hoge = 42 " 変数名 : 値 " を出力 Debug hoge " hoge : 42 と出力 " 変数名がない場合はその名前だけ出力 Debug foo " foo と出力 とても便利。
今まで めんどくさかったので rbenv を使っていなかったのですが Ruby 2.5 をインストールする為に入れたのでその覚書。 rbenv とは?みたいなことは以下の記事を参照してください。 rbenvとは?(rbenvを利用したRubyのインストール) - Qiita 事前準備 すでに system の gem で bundle などをインストールしている場合は削除しておくと混乱が少ない。 $ gem uninstall bundler $ gem uninstall bundle あと ~/.bundle なども削除しておく。 rbenv のダウンロード rbenv 本体は ~/.rbenv に保存 $ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv ruby-build のダウンロード rbenv 以外に Rub
RSpec では subject と is_expected を利用して次のようにテストを書くことが出来ます。 context "test" do subject { 42 } # is_expected の内部で subject が呼び出される it { is_expected.to eq(42) } end raise_error を使いたかった 次のように raise が発生する場合は is_expected を利用することが出来ません。 context "test" do subject { raise RuntimeError } it { is_expected.to raise_error(RuntimeError) } end これは is_expected が内部で expect(subject) という風に呼び出されるためです。 raise_error をテストするため
一人 vimrc advent calendar 2017 25日目の記事になります。 今日で終わりっ!! と、言うことで vimrc を拡張するコツみたいなものを。 vimrc を設定する目的 vimrc を書こう!って言っても最初はどういう風に書けばいいのかわからないと思います。 Vim はかなり特殊なエディタなのでまずは Vim らしい使い方 よりも *自分の使い勝手のよいエディタ を目指すとよいともいます。 Vim を使い始めた人がよく『カーソルキーを封印する』みたいな事を行っている人がいると思うんですが、そういう矯正をしてストレスを溜めるよりも『ストレスがない設定』を行っているほうがよいかなーと個人的には思います。 別に自分が使いやすければカーソルキーを使ってもええんやで…。 :help を読む まずは基本中の基本ですが :help を読みましょう。 Vim は :help がか
Vue.js #1 Advent Calendar 2017 24日目の記事になります。 少し前に Electron + Vue.js + Element でネイティブアプリの開発を行っていたのですが、その時に利用したコードなどを簡単に紹介してみようかと思います。 Element とは Element(element-ui) とは Vue 2.0 ベースのコンポーネントライブラリになります。 例えば、以下のようにモーダルダイアログからフォーム入力などを行うことが出来ます。 index.html <!-- import CSS --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <div id="app"> <!-- 登録ダイアログ --> <el-button @
Haskell (その2) Advent Calendar 2017 16日目の記事です。 ちょっと時間が過ぎてしまってすみません…。 Haskell 関連のネタが特に思いつかなかったので『Vim から Hoogle を Web 検索する』簡単な Vim プラグインをつくりました。 ちなみに既存のプラグインとして vim-hoogle があるのですが、こちらはローカルのコマンドを利用しているようです。 体調不良で時間がなかったのでしょぼいです… インストール Vim ではプラグインをインストールする手段はいくつかあるんですが、neobundle.vim を使用する場合は以下のような感じです。 NeoBundle 'osyo-manga/vim-hoogle-web' 要求 Vim 8.0 以上 curl もしくは wget コマンド Website を Vim で読み込む場合 Vim 8.
一人 vimrc Advent Calendar 2017 4日目の記事になります。 今回は vimrc から別のスクリプトファイルを安全に読み込みます。 任意のスクリプトファイルを読み込む さて、vimrc が少し大きくなってくると プラグイン キーマッピング コマンド filetype みたいに設定をファイル単位で分割したいと思うことがあると思います。 こういう場合は :source コマンドを使って任意のスクリプトファイルを読み込むことができます。 " :soure {file} source /path/to/vimfiles/plugin.vim source /path/to/vimfiles/keymapping.vim source /path/to/vimfiles/command.vim source /path/to/vimfiles/filetype.vim 読み込
一人 vimrc Advent Calendar 2017 2日目の記事になります。 今回は vimrc の設定でよくみかける(気がする) set nocompatible について簡単に解説します。 set nocompatible とは set nocompatible とは 'compatible' オプションを無効にするため設定です。 では 'compatible' オプションとは何なのかというと『Vim をなるべく Vi互換にする』ためのオプションになります。 つまり 'compatible' オプションが有効な場合は、『Vim が Vi互換となっている』為、『Vim の便利な機能』が使えません。 なので Vim を Vim らしく使うためには 'compatible' オプションを無効にするために set nocompatible をする必要があります。 set nocompa
初心者C++er Advent Calendar 2017 1日目の記事になります。 別の Advent Calendar の記事を書いていたら遅れてしまって申し訳ない。 まだ、Advent Calendar の参加者に飽きがあるので気になっている人はどんどん参加してもええんやで…。 さて、初心者ネタって言うことで C++ (や C言語)を学び始めると『おまじない』とよく言われる #include についてちょっと解説してみようかと思います。 コンパイルの流れ #include を理解するにあたってコンパイルがどのように処理されているのかを知る必要があります。 コンパイル時の流れをざっくりまとめると以下のような感じになります。 1.プリプロセス処理 2.コンパイル処理 3.バイナリの生成 #include はここでいう『プリプロセス』という処理に該当します。 プリプロセス処理 プリプロセス
次のページ
このページを最初にブックマークしてみませんか?
『Secret Garden(Instrumental)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く