«前の日(12-24) 最新 次の日(12-26)» 追記

いがいが日記


2003-12-25 クリスマスですね。

_ image_exプラグインセットアップ完了

絵日記プラグイン拡張版セットアップできました。

写真は寿都町の風力発電風車です。

風車のまわりはだだっぴろい平原なので、観光でいくと面白いです。

低い山の向こうに海が見えてきれいです。

でも、勝手に敷地内入って良かったのかな?(^^;)

_ output_rdf.rb

今度はRSSに書き出すプラグインをセットアップ。 一昨日もちょっとやってみたけど、やっぱりエラーする。 調査したいが今日はここまで。
Plugin error in 'output_rdf.rb'.
(eval):81:in `instance_eval': undefined method `subtitle_to_html' for #TDiary::TdiarySection:0x402976f4
-- output.rdf
 	diary.visible? and diary.each_section do |section|
`subtitle_to_html' for # 
		if section.subtitle then
		link = %Q[#{uri}#{anchor "#{date}\#p#{'%02d' % idx}"}]
		subtitle = section.subtitle_to_html
たぶんこのあたり。sectionのオブジェクトどうなってるの? Ruby文法調べねば。 ↓のエラーと似てるけど違うっぽい。 この対処しても治らなかったし、エラーが起きているのはそこより前な気がする。
http://www.tdiary.org/archive/devel/msg01060.html
http://www.tdiary.org/archive/devel/msg01088.html
[12/27追記] output.rdf設置できました! 原因はなんのことはなく、tDiary本体(1.5.5)とプラグインのバージョン(1.5.6用)があってなかったことで、プラグインってのはダウンロードするものだという先入観のもとtDiaryフルセットの中に入っていることに気が付かず、でも昔はプラグイン設定できてたのはきっと当時ダウンロードしてきたプラグインセットは1.5.5用だったと思うわけです。(tDiary1.5.5が最新だったんで) このことを日記に書いたのはメモと「日記に書けばやらざるを得ないだろう」という自分へのプレッシャー(^^ゞを兼ねてたわけですが、結果ただただしさんにもツッコミしてもらって棚からぼた餅って感じでした。その割にはこういうところに書くならせめてプラグインのリビジョン書いておけよ!という基本ができてないあたり中途半端(^^;)。
本日のツッコミ(全4件) [ツッコミを入れる]

Before...

_ いが [おわ!たださんだー!ツッコミありがとうございます。バージョンも調べてみます。っていうか一番最初にそれやらないと。>自..]

_ いが [そっか、たぶんインストールしてたプラグインはtdiary1.56用なんだ。っていうか、1.55フルパッケージにちゃん..]

_ whitebug [あまりにも空の色がきれいなので、壁紙としていただきましたです。]


2004-12-25

_ SONY TIMER?

macとPCに繋がっているミニコンポは7年前くらいに買ったもの。

ディスプレイがつかなくなったけどアンプ&スピーカーとしては現役だ。

ところが最近、唐突に電源が入るようになった。

夜中とか寝てると「うぃんういん」って起動音がしたり。

どこかから赤外線が発生してリモコンが誤動作してるのか???

それともこれが噂のソニータイマーってやつ?

_ ラピュタ

TVでやってたので途中から見ました。

やっぱええね。

でも「さぁみんな、しっかり稼ぎな!」でCMへ行くのはどうかと思う。

あと、ラピュタの滅びの言葉はセキュリティー的にどうかと。

あれだったら間違って作動させたりしちゃうのでは。。。

_ AdobeReader7

速くなったというので使ってみた。

初回起動は3秒くらい、次回からは1秒程度。

おお、速いじゃん!

初回はAdobeReader6+AdobeReaderSpeedUpと同じくらいのスピードでます。

2回目起動からはさすがにプロセスが残ってるだけあってそれよりも速くなります。

そんなわけで移行をお考えの方はオススメです。

#でも、できればもっと早くこれ出して欲しかった。。。

本日のツッコミ(全3件) [ツッコミを入れる]

_ yuzdaisy [>ラピュタ だからいまは滅びた街だったのですよ!]

_ IGA [う〜ん・・・Adobe Reader7様子見してたんですが採用しますかね・・・。]

_ いが [>yuzdaisyさん ラピュタが滅びた理由はそれか!! 仕様はちゃんと検討しなくちゃダメですね。 あ、こちらでは初..]


2005-12-25

_ [autorace] SG第20回スーパースター王座決定戦最終日

川口オートデビュー。

年末のSGレース優勝戦とあってすごい混雑です。

伊勢崎とちがってスタートラインのあたりにも上部の席がありました。

そこで見るとコーナーの侵入が見えてなかなか面白い。

でもやっぱり見易い正面で見たいので、良い場所がとれるように予想は即決即買い。

この節は競艇の賞金王シリーズみたいに上位12選手とそれ以外の選手で別番組。

最終日なのでそれぞれの優勝戦が11、12レースにあり、

10レースも上位12選手の優勝戦にもれた選手の番組なのでかなり面白かったです。

最終レースは池田と貢のマッチレース、熱かったです。

途中で貢が池田を捌いてそのままいけば3連単的中だったのですが、

残念ながら再び池田が捌いて1着2着が逆でした。(^^ゞ

でも熱いレースで面白かったです。

結果は3/6レース的中、-570円。

レースでは結構勝っているのですが、駐車場代と新聞代締めて1500円が取り返せませんでした。。。

無料の駐車場は今日は午前中に満車だったとか。

さすが川口は人が多いなぁ。

そうそう、どうぶつの森を持って行ったらすれちがいに成功してました。

こんなところでも成功するのかー。

家族連れも多かったから、小さい子が持ってたのかもね。


2006-12-25 寒い冬晴れの日

_ 日記

また久々に日記らしい日記を書きます。

だらだらとしてそれでいてまったりと。

先週でリリースが一段落したので今日から冬休み。

こんなに長い年末休暇は社会人になって初めてだ。

BBCラジオで現在放送しているものをネットでLIVE放送していることを発見。

時差のある国の放送中のラジオを聴くっていうのはおもしろい。

あちらはまだ未明だろう。クリスマスの朝と言っている。

クリスマスソングがゆるゆらと。

友人と英語のtheの使い方について話す。

in the section 2.3 は誤りで in section 2.3 が正しいそうだ。

なぜだ。慣用表現は覚えなくちゃいけないのでしんどい。

お昼はクリームチーズパイとクルミパンと「じっくりことこと」シリーズのコンソメスープ。

最近のインスタントスープは非常においしい。

食後にラプサンスーチョンをいれる。

週末にヨドバシで買おうと思った青いPSP、混んでて買えず。

yodobashi.comで買って36時間で家に到着。

待ち時間は長いけど所要時間は短くていい感じ。

GPS付きMAPLUSという地図ソフトを買ってカーナビにしてみよう作戦。

そしてアマゾンがソフトを発送してくれない。

24時間以内発送→在庫ありに表記が変わってからさらに遅くなった感じ。

発送数が増えすぎて追いつかないのかな。

ラジオから"I just call to say I love you"。この曲好きだ。

そんな、まぁ、幸せな休日。

_ [svn][win] SubversionServer

Windows機上でのSubversionServerインストール方法をまとめたので公開します。

cvs2svnがwinではうまくいきそうになかったのでlinuxマシンで移行しました。

既にできあがっている環境を使ったので、

移行環境の作成に関しては何も記述がありませんすんません。

あと、SubversionServerのバージョンアップに際しては

一度リポジトリのDump, Create を行うと新バージョン形式でのリポジトリが作成されるようです。


2007-12-25 曇り、寒い1日

_ [tdiary] tdiary2.2.0

前回失敗したので改めてtdiary2.2.0に移行作業。

前回はファイルUpdateでがんばり中途半端になってしまったようなので、

今回はクリーンな状態でセットアップして

自分の変更を加えていった。

おかげでスッキリしました。(^^)

うまく動かないとこあったら教えてください。

あと、誰かtrackbackテストしてくれるとうれしいです。(笑)

やってみて分かったのは、

いろいろと自分で手を入れた部分は新バージョンでは標準になってたりして

思ったよりも作業が少なかったことです。

改めましてただただしさん始め、開発者のみなさんに感謝します。

以下、自分用メモ。

---

■自分用テーマ追加

■トラックバックプラグイン(tb.rb)

■iddyプラグイン

■twitter表示プラグイン(twitter_badge.rb)

■はてぶプラグイン

[EP]を出さないようにとか自分用に手を入れてある。

uconvが必要だと言われたので、uconv.soをpublic_html/tdiary以下に。

■image_exプラグイン

image_ex.rb, image_size.rbの2つ。

imgesフォルダも忘れずに。

■「日々是横着」のページに書いてある

head['Last-Modified'] = CGI::rfc1123_date( tdiary.last_modified )

のコメントアウトはしなくても動いてるぽい。

xreaの仕様が変わってるのかも。

■シェバング行

何もしなくてOKぽい。

■その他

設置時のwikiも参考になるかも。


2008-12-25

_ [comic] そこをなんとか

引き続きマンガの紹介。

弁護士というとエリート、お金持ちなイメージですが、

司法試験合格者大幅増量で弁護士が余り就職難という設定、

元キャバ嬢のヒロインが新米イソベン(居候弁護士)をするお話。

なんかすごい設定ですが、

この方の絵だとぎらぎらした感じはしなくて

むしろゆるーく楽しめます。

法律とか弁護士とか裁判所とか知らない世界の覗けます。

あと、作者の麻生みことさんは新創刊の「good afternoon」でも連載してます。

「路地恋花」という本の装丁屋?さんのお話です。

題材の選び方がユニークだなぁ。

こちらもコミックが楽しみです。

4592187857
本日のツッコミ(全4件) [ツッコミを入れる]

Before...

_ いが [吟さんはなんでそんなに少女漫画系の雑誌をフォローしてるんですか?(笑) さすがだなー。見習わねば。]

_  [それは、殿ぽんから毎月3〜4冊供給されるからです・・・ 今はLaLaの「ちょっと江戸まで」がお気に入り(w]

_ いが [>吟さん ぉー、「ちょっと江戸まで」は津田さん(彼氏彼女の事情)の新作ですか。 さっそくamazonのお気に入りに追..]


2010-12-25

_ TupleSpaceとクリスマスに読みたい2冊の赤い本

メリークリスマス!

これは Ruby逆引きレシピAdvent Calendar の参加エントリです。

12/25担当のいがいがです。

前日の担当は @ukstudio さんの IRCでミサワをいつも側に… でした。

今日は「レシピ133:タプルスペースを介した分散処理を行いたい」のタプルスペースを紹介します。

タプルスペースは那須のKent Beck こと関さん作のライブラリRindaで実装されています。

「プロセス間で通信できる箱」といったイメージです。

TupleSpace1

タプルスペースという箱を作り、その中にタプル(オブジェクト)を出し入れできます。

タプルとしてArrayやHashなどさまざまなRubyのオブジェクトを扱うことが可能です。

これを使うと、プロセス間通信キューが簡単に実装できる優れものです。

■タプルスペースを動かしてみよう

レシピ先輩に教えてもらったサンプルコードでタプルスペースを起動します。

次に、irbを起動してこの箱にArrayオブジェクトを出し入れしてみましょう。

箱に入れるのは write, 取り出すのは take メソッドを使います。

takeして、その前にwriteでタプルスペースに格納したオブジェクトを取得できました。

(ちなみに、$ts.take(["message",nil])の引数の "message"はラベルのようなもので、

nilはそのラベルを持つオブジェクトの中からパターンマッチで取得が可能です。(nilは全マッチ))

■タプルスペースのメリット

拙作のLTタイマーTwYMもタプルスペースを使っています。

タイマーはtwitterやIRCなど複数のソースから表示メッセージを取得するため、

それぞれ別のプロセスとして起動してメッセージをタプルスペースにつめています。

表示アプリはタプルスペースからデータを取り出して表示しているだけで、

元のデータがIRCだったのかtwitterだったのかを意識しなくても済みます。

プロセスが別れているので、接続の調子が悪いときなどは

OSのshellから問題のプロセスだけを再起動して復活させることができます。

他の問題ないプロセスを動作させたまま問題対応できるのが利点です。

(運用中にタイマーとは別の画面でソースを書き換え、

取得するハッシュタグを切り替えたりなんてこともたまにしてます)

さらに、dRubyでお話ができれば誰でもタプルスペースを操作できるので、

Ruby1.8で起動しているタプルスペースにRuby1.9プロセスがwrite, take なんてこともできます。

これのおかげでタイマーもモジュールごとにRuby1.9対応を進められそうです。

プロセスが別れることのデメリットとしては処理のオーバーヘッドがあります。

処理速度を気にする場合はスレッドとQueueクラスの利用を検討してみてください。

■惚れさすタイトルをタイマーに流してみた

Ruby逆引きレシピAdvent Calendar 12月17日

「地獄のRuby札幌の「女に惚れさす逆引きレシピ集」 - 準二級.jp」から

ミサワネタにふれなくてはいけないような流れになっているので、

タイマーに惚れさすタイトルを流してみました。

所定のクラスへ詰めてタプルスペースへ格納するだけなので、

このような新しいソースへの対応が簡単で、タプルスペースを重宝してます。

horesasu

■レシピ先輩への道

今日はタプルスペースがプロセス間通信する入れ物であることを紹介しました。

より詳しくは最近電子版も出版されたdRubyによる分散・Webプログラミング(初刷り)を参照ください。

また、タイマーの仕組みに関してはとちぎRuby会議でお話した資料を参照ください。

逆引きレシピ本には日々の生活を便利にしてくれるレシピがたくさん載っています。

困ったことがあったとき、目次を眺めてみると解決のヒントを教えてくれる頼りになるレシピ先輩です。

これは、本に限ったことでなく、日常の会話やtwitterでも同じことが起こっています。

「○○で困ってるのだけどいい方法ない?」

と聞くと、世界に散らばる先輩方がヒントを教えてくれたりします。

このAdventCalendarのように、レシピ先輩の活躍は本を飛び出し、世界へ広まっています。

ぜひあなたも時にはレシピ先輩の一員としてレシピを紹介してみてください。

また来年、どこかのブログであなたのレシピ先輩と会うことを楽しみにしています!

あと、ミサワ流れを作った @june29 さんはけしからんので、来年ももっとやるように。

4798119881

4274066096


2012-12-25

_ tdiaryのRubyをバージョンアップ、styleをGFMへ

asakusa.rb にて @hsbt 先生に教えてもらってtdiary を動かすRubyのバージョンを上げた。1.9.3-p194から1.9.3-p327へ。CGIでRVMのRubyを使う場合はシェバング行にrubyのパスを指定すればOKなのだけど、

  • #!/home/igaiga/.rvm/rubies/ruby-1.9.3-p327/bin/ruby

っていう書き方だとgemがそのgemsetのものが使われないのではまる。(昨日はまった理由はこれだ)

  • #!/home/igaiga/.rvm/wrappers/ruby-1.9.3-p327/ruby

と、wrappersの下のrubyを使おう。そして書き方のstyleをGFM(Github Flavored Markdown)に変更。やったー。ヽ(´▽`)ノ star2 @hsbt さん開発&サポートありがとうございます! また、GFMの使い方は @machu さんのサイトが参考になりました。ありがとうございます!

まちゅダイアリー:日記の記法をGFM (Git Flavored Markdown) に変えた


2013-12-25

_ 高専は「はじまりの街」

これは Kosen Advent Calendar 2013の参加記事です。昨日12/24はttata_tritさんの ものづくりのつくりかた でした。「決意するところからスタート」にとても共感します!

はじめましての方もいらっしゃると思いますので自己紹介。このアドベントカレンダーには昨年 Kosen Advent Calendar for Teacher に参加しました。高専の先生ではなく、大学で非常勤講師でRubyとRailsを教えています。仕事ではRailsをつかってオリジナルTシャツサービスと、みんなで花束を贈るサービス(近々オープン)をつくっています。 ちなみに弊社spice lifeのエンジニアは全3人で、全員高専生で、全員このアドベントカレンダーを書いています。 asonasHolyGrailです。弊社では一緒にサービスを作るエンジニア、デザイナーを大募集中です!(宣伝)

はじまりの街と道具箱

卒業してから思い返すと、高専はRPGの「はじまりの街」みたいなものだったな、と感じます。広い世界の入り口で、いろいろ教えてくれる場所、武器を買ったり魔法を覚えたり、冒険の準備をするところです。

今思い返すと、先生は実にいろんな道具を私たちの道具箱にしのばせてくれました。(「いいからもってけ!と私たちの道具箱に入れてくれた」は @june29 さんの名言。)三角関数、フーリエ解析、電気回路、トランジスタの静特性、電磁気学、量子力学・・・。

現役学生の方は、高専の勉強なんて社会に出てから役に立つの?と思っている人も多いかもしれません。たしかに知識は使わないものも多いのですが、私の答えはYESです。

自然科学(情報科学も含む)の世界ではいくつかの黄金パターンがあります。1つ例を挙げると、「ひとつ大きな世界、別の世界を導入して、そこで演算をして、元の世界へ戻す」というものです。抽象的に言うと難しいかもしれませんが、具体的には、物理の極座標、電気交流回路の複素数計算(jωR, 1/jωC)などなど。フーリエ解析して周波数空間で考えるなんてのもあります。

これらの知識を直接使うことがあるかというとレアケースかもしれません。(実際使うこともあります。)ただ、そういう解法があることを知ること、そして抽象的な世界で考えることは世の中のあちこちで役立ちます。これはとても良い訓練でした。

魔法屋 "Rails寺子屋"

私もこのはじまりの街でRails寺子屋という「魔法屋」を今年から構えています。RailsはかんたんにWebアプリをつくるための強力な道具です。1日のワークショップで、初めての方には画像を投稿するミニブログアプリを作って、ネットに公開するという題材を体験してもらっています。2回目以降は課題を選んだり、自分で設定して自由に学ぶ方式で、WebアプリやRailsの基礎、twitter データの解析、オープンソースへの参加の基礎知識となるGithub pull requestの使い方を学んだり、師範に直接質問することもできます。

次回は来年1/18(土)に東京で開催します。次回は師範(現役Railsエンジニアが集まっています)も参加する「コード大喜利」や「ぶつかり稽古」といった見て楽しむエキシビジョン枠も用意しています。申込み〆切日は過ぎていますが、空き枠がある限り申し込めますので興味を持った方は気軽に遊びにきてください。(´▽`)

なぜRails?

なぜRailsを?という質問に答えると長くなってしまうのですが、簡単に書くと次の3つを持っているからです。

  • 人生を面白く、豊かにできる 自分のために書くちょっとしたコードでも小さな幸せを得ることができます。毎朝天気予報をiPhoneに届けてくれたり、twitterで自分への言及を拾えたり。

  • 世の中を良くすることができる 現在はWebサービスによって私たちの世界は便利になっていく過程の時代です。世の中を良くすることは対価(給料)をもらえることでもあり、それは持続可能ということでもあります。

  • 分からないことがあったときに、聞ける仲間がいる 師範や一緒に参加している参加者に聞くと、きっと聞いてないことまで教えてくれます。ちなみに、16歳でイオナズンを唱えるような @sora_h という凄腕師範もいますが、自称怖くないとのことなので、気軽に話かけてみてください。

はじまりの街の歩き方

この街で何をするかはみなさんの手に委ねられています。高専の先生って面白い研究をされている方も多いですよね。先生との距離が近いのが高専の大きなメリットの1つだと思います。(大学だと研究室配属は4年生で、しかも大学院の学生もいて大所帯なので。)興味のあることがあったら、先生の部屋を訪ねたり、Rails寺子屋のような街外れの魔法屋へ行ったり、あるいは外の世界を冒険してみてください。(冒険の旅はたのしいものですが、そのたのしさを書くのはまた別の機会に。)

みなさんの冒険の旅が豊かなものになることを。そして旅のどこかかで出会えることを楽しみにしています。

まとめ

いま、DSで「ファイアーエムブレム覚醒」をやってます。「絆」がモチーフになっていて、近くに仲間がいると能力があがったり、一緒に攻撃してくれたりします。これって現実世界でも同じだなぁと。Rails寺子屋もこんな仲間を探せる場所を提供していきたいです。

Kosen Advent Calendar 2013 は滅びぬ

今年のアドベントカレンダーは今日で終わりですが、感極まってしまっている方は12/26のカレンダーを書いちゃえばいいと思います。↓のコメント欄もURLをつなぐのにご利用ください。٩( 'ω' )و


2015-12-25

_ Ruby2.3.0

恒例のクリスマスリリースで今年も新しいバージョンのRuby2.3.0がプレゼントされました。コミッターのみなさんありがとうございます!

早速rbenvでいれて gem i rails --pre したらeventmachine gem とbrew openssl の組み合わせでこけたのでメモ。

current directory: /Users/igarashi/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/eventmachine-1.0.8/ext
make "DESTDIR="
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:116:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^
1 error generated.
make: *** [binder.o] Error 1

以下のオプションでインストールできた。

gem install eventmachine -- --with-cppflags=-I$(brew --prefix openssl)/include

bundlerに設定するには以下とのこと。

bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include

stackoverflowに書いてある通りでした。

http://stackoverflow.com/questions/30818391/gem-eventmachine-fatal-error-openssl-ssl-h-file-not-found


2021-12-25

_ 入門書におけるRuby2.3からRuby3.0そしてRuby3.1への変化

igaigaです。これは Ruby Advent Calendar 2021 の25日目の記事です。昨日はmrknさんの 「来年リリースする bigdecimal 3.2 はどうしようかな」 でした。BigDecimal、長い間ずっと進化してきていてすごいです。

私は 「ゼロからわかるRuby超入門」 という初学者向けの入門書籍を2018年に書きました。発刊当時の最新のRubyはバージョン2.5で、この書籍ではRuby2.3から2.5までのバージョンに対応させて書きました。Ruby2.3は当時のmacOSにデフォルトで入っているバージョンで、大学などの講義で使うときにインストール不要で使えるようにこのバージョンも対象に入れました。

このRuby超入門、今年2021年の夏にひっそりとRuby3.0対応をしました。現在物理書籍として流通している第3刷以降では新しい内容になっています。改訂ではないので大きな変更はできなかったのですが、Ruby2.3や2.4だけで必要だった記述を削除したり、Ruby3.0までで変更になった点を更新しています。

この記事ではその作業を振り返って、Rubyの基礎的な範囲でのバージョンによる進化を書いていきます。

また、増刷ごとに読者のみなさまからのフィードバックを反映し、誤字の修正のほか、わかりづらい表現を変更するなどの作業をいれています。特に顧問先の フィヨルドブートキャンプ の受講生さんからたくさんのフィードバックをいただきました。この場を借りて感謝いたします。また、フィヨルドブートキャンプではRuby超入門の 講義動画 をつくりましたので、動画で学びたい方はご検討いただけましたら。

Ruby2.4でのbinding.irbの導入

Ruby2.4でbinding.irbと書くことでコード中で実行を一時停止してデバッグすることが可能となりました。入門書においてこれは革新的な変化で、Rubyをインストールしたらすぐに使えるというのが大きいです。もしもこの機能がないとpryなどのGemをいれることになりますが、その場合はGemについての説明が必要になり、これはRuby超入門では全11章中の第10章で登場するのを待たないといけなくなります。デフォルトで使える機能として入ったおかげで、2章でbinding.irbを利用したデバッグの方法を説明することができました。また、Ruby2.5では require "irb" も省略可能になったのも嬉しい変更です。

Ruby2.4でのArray#sumの導入

Ruby2.4でArray#sumが導入され [1,2,3].sum と書けるようになりました。このメソッドは説明の例題として使いやすいので例として登場させました。ちなみにRuby2.3向けには代わりに inject(:+) を使っていました。injectでは特別に inject(&:+) の&を省略できるのが懐かしいですね。

Ruby2.4でのNet:HTTP.postの導入

Ruby2.4でNet:HTTPのPOSTをかんたんに書けるようになりました。

require "net/http"
require "uri"
require "json"
uri = URI.parse("https://www.example.com")
result = Net::HTTP.post(uri, {mocha: 400}.to_json, "Content-Type" => "application/json")
p result

直感的に書けますね。このコード、Ruby2.3まではどう書いていたかというと次のようになります。

require "net/https"
require "uri"
require "json"
uri = URI.parse("https://www.example.com")
request = Net::HTTP::Post.new(uri.request_uri, "Content-Type" => "application/json")
request.body = {mocha: 400}.to_json
https_session = Net::HTTP.new(uri.host, uri.port)
https_session.use_ssl = true
response = https_session.start do |session|
  session.request(request)
end
p response

こちらは覚えるのがちょっと大変でした。Net::HTTP#postメソッドを使うと1メソッドで書けて便利になっていることが分かります。

Ruby2.4での正規表現の match? メソッド導入

Ruby2.4で正規表現マッチを行う match? メソッドが導入されました。

"カフェラテ".match?(/ラテ/)

Ruby2.3では =~ を使うように書きました。書籍にとっては真偽値を返すメソッドは末尾が?で終わる旨を説明できる例が増えるのでありがたい追加です。現実のコードもかなり読みやすくなったと感じています。

Ruby2.4でFixnumとBignumがIntegerへ統合

これは利用する側ではほとんど影響はなく、エラーメッセージやclassメソッドの結果が異なるくらいでした。Ruby core内部では大きな変更だったのではないでしょうか。(どうなのだろう?) 現実のコードではバージョンアップ当初はFixnumやBignumクラスがないよ、というエラーがよく出ていたのが懐かしいです。

追記(2022/01/09: FixNum, BigNumをFixnum, Bignumへ修正しました。コメントありがとうございました。

Ruby2.5でブロック内でbeginなしのrescueが書けるようになった

地味ですが、インデントが減るので読みやすくなりますね。メソッドでも同様に書けます。

bill = 100
numbers = [0, 1, 2]

numbers.each do |number|
  warikan = bill / number
  puts "1人あたり#{warikan}円です"
rescue ZeroDivisionError
  puts "おっと、0人では割り勘できません"
end

Ruby2.6からbundlerがデフォルトでインストールされる

これも神変更。今までは「BundlerでGem群をインストールするには3つの手順を踏みます。Bundlerのインストール、Gemfileの作成、bundle installコマンドの実行です。」となっていた手順が2つで済むようになりました。本当にありがたい。仕事でも新しくつかうRubyのバージョンをインストールしたあとにbunlde installしてbundlerがありませんというエラーを出すことがよくあったので、それがなくなってかなり楽になった。

Ruby2.7でprivateメソッド呼び出しのルールが変更

「private なメソッドはレシーバ付きでは呼びだせない」というルールから、「self.methodの形式でも呼び出し可能」に変更されました。今までprivateメソッドが呼べていた範囲内ではself.と書けるはずなので、privateメソッドを書ける場所が増えたわけではないです。

これは入門書ではかなり説明が難しくなってちょっと困っています。Ruby超入門では最低限の文章変更にとどめて、「privateなメソッドはレシーバを指定した呼び出し方ができない」といった説明にしています。self.methodの形式はselfだけが許可されるのでレシーバを指定しているわけではない、という解釈です。意図としては間違っていないと思うのですが、もっとうまい説明方法があったら教えてください。

Ruby2.7でパターンマッチが導入

case inで書けるパターンマッチがRuby2.7でexperimentalで追加され、Ruby3.0で正式版になりました。Ruby超入門では変更が大きくなってしまうのでまだ書けていませんが、書くならばcase whenのときにcase inもあるよとだけ伝えて、正規表現の節または次の節でパターンマッチという便利な道具もあると書き足したいと思っています。改訂のチャンスがあれば書きたいので、改訂できるくらい売れるようにみなさん書籍の宣伝よろしくお願いします。

Ruby2.7でobject_idの仕様変更

object_idがメモリ番地ベースだったのに代わり、なんらかの通し番号に変更されました。コンパクションGCが導入されてメモリ番地が変更されるケースへの対応だと考えています。利用者側からすると「表示される数値の桁が少なくなったな」と気づくくらいでしょうか。Ruby超入門ではオブジェクトが同一であることの説明でオブジェクトIDをつかっているので、オブジェクトの識別番号としての意図が残ってくれたのは本当によかったです。

Ruby2.7でEnumerable#tallyが追加

章末の練習問題に「文字列"caffelatte"の中で使われているアルファベットと、その回数を数えてください。」という問題があります。これはハッシュを生成してキーに文字、値に回数をカウントしていってもらうのを意図した問題でした。Rubyの本だと問題を作っても1メソッド2メソッドで解けてしまうことも多いのですが、プログラミングの練習としてはもう少し長く3手、5手かかる問題が欲しいのでかなり考えて作った問題で、お気に入りの問題でもありました。

Ruby2.7から追加されたEnumerable#tallyを使うと、"caffelatte".chars.tally の2メソッドで同様の結果が得られます。Rubyが便利になっていくと練習問題作成は難しくなっていく例です。いたしかたないです。

Ruby3.0でWebrickが標準添付ライブラリから除外

10章ではSinatra gemをつかってWebアプリの基礎について説明しています。SinatraをつかうとSinatraが仕様変更したりして将来動かなくなることもあるのでは?と執筆時に検討はしていたのですが、Webrickが外れるところまでは予想していませんでした。脆弱性対応は本当に大変なので妥当な判断なので、予想できてもよかったなとも思いますが、執筆時は標準添付ライブラリのGem化もまだ始まってなかった?と思うので、その状況では確かに難しいなとも思います。

Ruby3.0ではgem install webrickでインストールしてください。これは書籍のWeb正誤表にも載せていたのですが、エラーで動かなくなることもあり、Ruby3.0でRuby超入門の範囲で一番聞かれることが多かった質問でした。3刷では変更対応済みです。

Ruby3.1へ

Ruby3.1では新しいデバッガであるdebug.gemが標準添付され、今から本を書くならば、デバッグについての記述も書籍の前半に説明を少なく書けるのはありがたいですし、書籍の学習を進める上でのデバッグ方法としても活用できて便利になります。Ruby2.7で入った新しいirbも色がついて見やすく使いやすくなりました。

また、Ruby3.0で導入された型定義ファイルRBSとその周辺ツールも整備が進み、エディタに型情報をサジェスト表示したり、呼び出せるメソッド一覧を選ぶこともできるようになりました。これらも学習の助けになりそうです。Rubyで書かれるコードでの変数名などの命名にこれらのツールが影響を与えるのかどうかも興味深いです。

このように見てみると、入門書の範囲でもRubyは便利な変更がいろいろと入り、それでいて互換性が壊れるような変更はとても少ないことがわかります。Rubyの進化を提供してくれているコミッタのみなさんに本当に感謝します。

書籍を書くときに感じたのは、Rubyで入門書を書くと説明が少なくて済むということです。他の言語の入門書を参考に読んでいると「これはRubyの場合は説明の必要がない部分だな」という部分がいろいろとありました。言語仕様としてシンプルで覚えやすいルールが行き届いていたり、記述量が少なくて済むこと、組込ライブラリのクラス群によく使う便利なメソッドが用意されていること、などがその要因かもしれません。

一方でエディタでのメソッド入力補完が弱いことは弱点だったかと思いますが、それが改善されていっていることはとても嬉しいです。また、この本を書くときに感じたbinding.irbがすぐに使えるありがたさと同じことが、debug.gemでも感じられるかもしれません。これらの改善は学習カリキュラムにも良い影響を与えていると感じています。

Ruby3.1のリリースは今日予定されています。みなさん引き続き良いRubyライフを!

本日のツッコミ(全3件) [ツッコミを入れる]

_  [細かいことですが,FixNum,BigNum は正しくは Fixnum,Bignum ですね。 private..]

_ otn [「privateなメソッドは任意のレシーバを指定した呼び出し方ができない」 「privateなメソッドはレシーバを..]

_ igaiga [コメントありがとうございます!Fixnum, Bignumを修正しました。 privateなメソッドの説明もあ..]


«前の日(12-24) 最新 次の日(12-26)» 追記