マトリョーシカ的日常

ワクワクばらまく明日のブログ。

Ruby on Rails でBundler::LockfileErrorになったけど解決できた話

 去年も書いていたけど、最近はRubyを勉強している。なにか面白そうなプロダクトをつくったみたいからだ。去年はRubyを頑張ってやって、クラスのあたりがなんとなく理解できるようになった。よし、「いよいよRailsだ!」と思ってやってみたら上記のエラーが出た。解決策をググっても情報が散逸していたのでメモ代わりにまとめようと思う。

 環境設定が終了したのち、はじめて `rails s` コマンドをつかってWEBサーバーを立ち上げようとしたら以下のエラーが出てきた。

(前略)
in `warn_for_outdated_bundler_version': 
You must use Bundler 2 or greater with this lockfile. 
(Bundler::LockfileError)

 なんぞこれ、と思って調べてみると...わからん。いまいち説明がわからん。bundlerというのが指定されていたバージョンとは異なるもので、それでエラーが起きている...らしい。
https://odenden.com/you-must-use-bundler-2-or-greater-with-this-lockfile/

 上記の記事を参考に

$ gem list bundler

 をターミナルに入力した。すると、

*** LOCAL GEMS ***
bundler (2.1.2, default: 1.17.2)

 と出た。たぶんこの2.1.2とdefaultの1.17.2が合えば問題ないのだと思う。

やったこと

 
stackoverflow.com

 上記の記事を参考にいろいろやった。私の場合は、ターミナルで

$ gem update --system
$ bundle update --bundler

 を打ったら上記のエラーは直った。railsのバージョンは

$ rails -v

としたら 「Rails 6.0.2.1」と表示された。

まだエラーが出る。

 「これでいいだろう」と思ったがまだエラーが出る。

(略)
No such file or directory @ rb_sysopen - 
(略) hello_world_sample/config/webpacker.yml (Errno::ENOENT)
~~
Webpacker configuration file not found 
(略) hello_world_sample/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - (略) hello_world_sample/config/webpacker.yml (RuntimeError)

 二種類のエラーが出た。Errno::ENOENTとRuntimeErrorだ。調べるとどちらも同じ現象から起きるらしい。
webpackerというのがPCにインストールされてないよ、ということらしい。

vviilloovv.hatenablog.com
qiita.com

 上記の2つの記事を参考にターミナルに打っていく。私の場合はyarnというのがインストールされていなかったらしいので、さきにそれをインストールする。

$ brew install yarn

そして、

$ bundle exec rails webpacker:install


 OK。これで rails sを実行した。

やったー!確認できた!

おわりに

 これからもRailsをいろいろ勉強していくぞ。


Photo by Nicolas J Leclercq on Unsplash

軽みのある書評というかメモを目指す/最軽量のマネジメント


 今年から書評という枠組みはとらないことにした。自分の中で他にも優先すべきことが増えたからだ。今までは書評の内容を二、三日かけて考えていたが、それはちょっともったいない。文章としてもっと軽みをもって記事を書いていきたい。

 「最軽量のマネジメント」を読んだ。サイボウズの人が書いた本で、これからの世の中のマネジメントについてなんか書いていた。最軽量とはマネージャーひとりに負担をかけず、軽快に動き回れるという意味合い。今までの承認印祭り、会議祭り、スケジュール調整祭りとは離れよう!という感じだった。

続きを読む

学生でなくなっても可能性は無限大だし、日々は楽しいよ。

f:id:kyokucho1989:20191225053539j:plain
Photo by John Fowler on Unsplash


広島大学ITエンジニアアドベントカレンダーの25日目の記事です。

 楽しそうなアドベントカレンダーを見つけたので、少し前のことを思い出しながら文章を書こうと思う。私は少しほど前は学生をしていた。授業に出て、単位をとり、サークルに通って適度にバイトをしていた。広島大学のキャンパスは無駄に広くてなんだか自由な雰囲気が出ていた。私はそこで機械工学を学んだ。ITではない。

 なぜ機械を選択したのか、不思議でならない。そもそも願書を出す直前までは、私は電気系を志望していた。それがどういう経緯かは忘れたがメカメカしい学科を選択していたのだ。そういうちょっとした食い違いが今日の私を作っていることもあって、人類の神秘である。

 いろんなことをやってみようとしたし、実際やった。自分ではない何かになりたかった。何者かになりたかった。あの大学の自由な風を浴びていたら、いつか自分もすごいことができるようになるのでは、とちょっとした期待があった。だけれど、結局私は普通の人間であるということがわかった。そうだった。

 みんな大人になってしまって、わたしももれなく大人になってしまって、こうして広島の地に生きている。それでもどこか、現状に抗う自分がいて、いろいろやってしまっている。「まだやれるんじゃないか、まだ間に合うんじゃないか」そういった思惑もある。答えは大きくYESだった。全然OK。

 毎年二つか三つか四つか五つか、十ほどの新しいことに取り組んでいる。楽しげな日々を過ごしている。なかでもM5Stackはすごい。これ一つでなんでもできるのではないか。実際できそうだ。単純なLチカだけで済ませるにはもったいないマイコン。来年はSORACOMのサービスを使って彼の知性を有効に活用したい。

 デバイスだけでなく、もっと人とかかわりを持って生きていきたい。オフラインのイベントに行けたらいいが、地方在住ということもあって、なかなか難しい。まずはオンライン上のコミュニティでふんばっていこう。それこそm5stackのユーザーグループとか、farmtory-labでわっしょいやろう。

 そんなかんじで学生でなくなっても、可能性は無限大だった。やれることはいくらでもあるし、私は一人だけど世界は世界だった。今が一番若いという理論を信じて、これからもよろしくお願いします。


 できることならもう一度サークル棟の前でジャグリングしていたいけどね。

え? 月額45円でIoT!?   できらぁ!

f:id:kyokucho1989:20191224053106p:plain

 みなさんこんにちは。これはSORACOM Advent Calendar 2019 ふたつめ の24日目の記事です。
 よくわからない年末の空白をてきとうに埋めるべく、記事を書くことにしました。

 みんな大好きSORACOMです。数年くらい前からなんとなーくその存在を認識していたのですがどうもぼやけていました。「なんかよくわからないけど便利そう」「アイコンがかっこいい」その程度にしか思ってませんでした。しかし、最近になって会社でSORACOMを使うようになってから、SORACOMのすごさが分かってきました。やばいなにこれ。確実に世界取ろうとしている……!
 個人の人がとっつきやすいデバイスをセットにして攻めてきたらとんでもないことになるな。そう感じました。


 そうしたら、すでにあるじゃないですか。
soracom.jp

 M5Stackセット!


そして
IoT データ通信サービス「SORACOM Air for セルラー」 月額0.4 USD(約45円)から利用可能な低トラヒック用途向け新料金体系を 5月16日より提供開始、日本でもグローバル向け Air SIM が購入可能に - IoT プラットフォーム 株式会社ソラコム


 月額45円でIoT!?


 できらぁ!

続きを読む

【PR】クラスの理解につまづいたらゲームプログラムを作ろう

Photo by Idil Mohamed on Unsplash

1.問題点:クラスが理解できない

 10月くらいからRubyの勉強をはじめている。1日30分~1時間程度しか時間がとれないが、それでも徐々に理解は進んでいる。for文を使わないRuby独特の構文もなれてきた。:をつけたキーワードなんちゃらというのもなんとなくわかった。
でもクラスの理解が進まなかった。
「クラスって何?」
「インスタンスって何?」
「オブジェクト指向って何?」
 クラスやらオブジェクトとかいうのはRubyに限らず、他のプログラミング言語にも登場する。きっと便利なものなのだろう。けれどもなんだか難しい。
 いままでの内容(配列・ハッシュ)はイメージが湧きやすかった。配列の並べ替えや、ハッシュから値のみを抜き取るというのも、一度やれば挙動が理解できた。
 でもオブジェクト!となるとさっぱりである。ウェブで検索しても言葉の説明ばかりでまったくわからない。いったいどうすればいいのか。

2.解決策:コードを書く!楽しく書く!

 答えは簡単。コードを書くことである。クラスを使ったコードを実際に書き、体で挙動を感じるのだ。そしてひととおりできたら、ちょっと修正してみる。「あ、そうか! ここをいじるとこうなるのか」とわかる。

 さらに欲をいえば楽しくコードを書ければいうことはない。楽しいは正義である。「いや、コードは苦しみながら覚えた方が身に付く!」という意見もあるかもしれないが、それで続かなければ意味がない。

何か自分に興味のある分野、親しみやすいジャンルに関係するコードを書ければいい。

3.ドラクエ風アプリをつくろうの概要

3-1:概要

 そこで出てきたのが今回紹介する教材である。「ドラクエ風ゲームプログラムを作ってみよう!」はドラクエっぽいコードを書きながら、クラスの理解を深めることができる教材である。
https://www.techpit.jp/courses/enrolled/696793

 ドラクエっぽいといっても超本格的なRPGをつくるわけではない。この教材では戦闘シーンの本当にコアな部分をつくるだけだ。つまり、「勇者とモンスターが1対1で戦い、どちらかのHPが0になったら終了」というものだ。

 本教材は4章で構成されてる。

  • 0章: 環境構築
  • 1章:勇者クラスの定義
  • 2章:モンスタークラスの定義
  • 3章:攻撃処理の実装
  • 4章:クラスの継承・ファイルの分割・リファクタリング

 実際のところ、3章までやれば動くものはできる。でも、「動いたからもう教材はやらなくていいや!」と投げ出さないでほしい。4章ではリファクタリング、つまりコードをより見やすく改善していく。煩雑としていたコードが徐々にきれいになっていく様はけっこう感動する。すげーとなる。

3-2:誰を対象にしているか

 この教材の対象者は、明確に記載はされていないが、個人的な考えでは次の2点はクリアしている必要があると思う。

  • RubyでHello Worldができている人(環境構築が済んでいる)
  • 配列・ハッシュが理解できている人

 ちなみにRubyの参考書として有名ないわゆる「チェリー本」で考えると5章まで理解できていれば問題ない。(6章の正規表現は使わない)

3-3:環境構築について

 本教材の第0章では環境構築について書かれている。しかし、私はそれに忠実に従う必要はないと思う。ひとまずはrubyをインストールしており、日本語の出力が出来ていれば問題はない。

puts "ハローワールド"

ができればいい。

 この教材をやるだけならxcodeやRailsはインストールしなくてもいい。さらに発展的な内容を学習するには必要だが、それはそのときにやればOK。
とりあえず教材を見ながら最後までコードを書いてみてほしい。

4.学習してみて

4-1. クラスがなんとなくわかった!

 ここからは実際に教材で学習をしてみた感想を書く。
 まず、クラスがなんとなーく理解できたのがよかった。クラスは設計書であり、仕様書であり、金型だった。おおまかな外観やふるまいをあらかじめ設定しておくことで、コードがきれいになる。
配列やハッシュや関数と違うのは堅牢さ。クラスは外からは変更できない場所にデータを収納できるので、途中でおかしな挙動をみせることが少ないらしい。そうか。

あとは、勇者やモンスターのパラメータの設定を通じて、アクセサメソッドのこともわかった。ここは本を何回読んでもしっくりこなかったところなので、わかるようになって嬉しい。HPのように途中から値が変わるものは`aatr_accesor`, 攻撃力、防御力のように変化しないものは`aatr_reader`を使えばいいことがわかった。

4-2. 処理を考えるのが楽しい!

 教材では2章の冒頭から、「まずは自分で処理を考えてみよう」というスタンスになる。1章でやったことと同じことをベースに自分で処理を考える。これが自分には楽しかった。「これでどうだ!」とコードを書いて教材の文章で答え合わせをする。というのを繰り返していた。どうもわかりないときは教材を見た。
そんな感じなので、「うまくできた!」と思っても作者とやり方がちがっていた...ということもあった。そのときは質問コーナーで「〜〜とやっても大丈夫ですか?」と聞いた。問題なかった。

 例えば、「3-3 モンスターの攻撃処理実装」の項目。モンスターの攻撃処理は以下の仕様だった。
>1.HPが半分よりも多ければ通常攻撃
2.HPが半分以下になると変身して攻撃力が1.5倍

自分は`@hp`とは別に`@initial_hp`というインスタンス変数を作ってそれを条件分岐に使った。でも、作者はそれとは別のやり方をとっていた。(詳しくは教材を確認してほしい)

 何はともあれ、処理を考えるのは楽しい。

4-3. リファクタリングが楽しい!

 ついでに言うと、4章からのリファクタリングも楽しい。4章のはじめに勇者クラスとモンスタークラスの親となるキャラクタークラスを作成した。あとはファイルの分割やモジュール化を行い、コードが読みやすくなった。掃除をしたあとのようなすがすがしい気持ちになる。
 PCの前にいないときは、スケッチブックにコードの流れやそれぞれの関数の役割を書いた。そして、「どこをどう直せば読みやすくなるか」「共通化できるところは何か」を考えた。こういうのも楽しい。教材では早い段階でファイル分割をしてしまうが、自分としては先に全体の関数を整理してからのほうがやりやすかった。
 

4-4. 紙の教材では味わえないリアルタイム感

 最後に書きたいのが、紙の教材では味わえないリアルタイム感である。普通の参考書を見ながらの勉強はわからないところがあっても、著者はどこか遠くにいる感じがある。でも今回のようなウェブ上の教材は違う。質問しても翌日には回答がかえってくるし、内容もすぐに修正される。

この動画を思い出した。堀江さんとマコなり社長という人が対談をしている。マコなり社長はプログラミングのカリキュラムをオンラインで作成していて、フィードバックを受けながら修正しているのだという。「教科書はアップデートされるべき」といった一言には堀江さんもメモってた。


【堀江貴文×マコなり社長】プログラミングは超絶簡単

5 まとめ

 ドラクエ教材のおかげで、非常に楽しくクラスの理解を深めることができた。来年はRailsをどんどんやっていくぞ!


www.techpit.jp