サカナ未遂

プログラミング、筋トレ、お酒など

gemの選定方法について

みなさん、こんにちは

 

railsを使用していてgemを入れる時、どういう基準で選べばいいか悩んでいました。

今日は、勉強会であった、ある企業のCTOから教えてもらったgemの選定方法について書いていきます。

 

star数が100以上ある

まあこれは当然の指標だと思いますが、やはり人気があるかどうかはここを見ると思うのでまずはstarを見るとのことです。

 

contoributorsの数が20〜30以上ある

 外部から貢献する人数が多ければ、活発に修正、改良が行われてる可能性が高いため、最低でも20以上ある方が安心できるそうです。

 

Fork数が多くない

どれくらいが多いとするかを聞くのを失念していましたが、Forkが多いということは、gem自体に修正の余地があるのに対応されないため、各々がforkして修正している可能性が高いと取れるそうです。

 

Issuesが放置されいない

Issuesに対してキチンと対応していると、アクティブなgemと判断できるそうです。

 

最終更新が1年以内

モジュールの修正があまり古いと、やはり開発が止まって放置されている可能性が高いそうです。だいたい目安は1年以内に更新されているものを選びたいとのことです。

ただ、いい意味で枯れてて修正の余地のないものもあるので、ソースコードを読んで判断する必要があるとのこと。

 

ActiveRecordに対してモンキーパッチを当てていない

これをやっていたらまず避けるそうです。

確かに危険な匂いがしますね。

 

以上です。

また他のエンジニアにも聞いてみて、自分なりの基準を見つけたいと思います。

それでは。

エンジニアの課金について

みなさん こんにちは

 

私はゲームをやらないのですが、電車乗っていると、結構スマホでゲームやっている方をよく見ます。

スマホのゲームって結構な金額を課金する人もいるようです。

私の職場には、先月9万円課金したという人もいました。

(9万円使うとほしいキャラが手に入るとか)

 

無課金では無理なんでしょうかと尋ねると、無課金でもやれないことはないが、効率が悪い。課金する理由は

・欲しいキャラを手に入れたい。

・強いキャラを手に入れてゲームを進めたい。

などとおっしゃっていました。

ゲームをやらない私からすると、もったいないなぁと思いつつ、

エンジニアの自己投資も課金みたいなものか?とふと考えました。

 

今年に入ってから新しい技術を習得しようと勉強をはじめましたが、

今年購入した本は、

【プログラム関連】

JavaScriptエンジニアのためのNode.js入門 350円

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ) 3218円

Ruby on Rails 5アプリケーションプログラミング 3880円

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書 3888円

RUBY技術者認定試験 公式ガイド (ITpro BOOKs) 531円

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES) 4536円

【電子合本版】Code Complete 第2版 完全なプログラミングを目指して 5400円

マスタリングTCP/IP 入門編 第5版 2200円

実践Vim 思考のスピードで編集しよう! (アスキー書籍) 2177円

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング 2380円

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus) 2776円

Ruby on Rails 5の上手な使い方 現場のエンジニアが教えるRailsアプリケーション開発の実践手法 3200円

メタプログラミングRuby 第2版 3240円

Web制作者のためのCSS設計の教科書 モダンWeb開発に欠かせない「修正しやすいCSS」の設計手法 1026円

改訂2版 Ruby逆引きハンドブック 4126円

Effective Ruby 3456円

改訂2版 パーフェクトRuby 3521円

パーフェクト Ruby on Rails 3110円

独習Git 3542円

 

結構買ってますね、、、まだ全部読破できていませんが(年内には必ず)

合計は54177円でした。

計算してみたらかなり使っててびっくりしてます。

プログラムの勉強するのに、今の時代は本がなくてもWebの情報だけでも

可能なのですが、Webの情報は断片的だったり、ピンポイントだったりで、

体系的に学ぶのにあまり適していない場合があります。

つまり、Webの情報(無課金)だけでもやれないことはないが、

書籍購入(課金)するほうが効率的な場合が多いと考え、思い切って買ってます。

Railsチュートリアルのような素晴らしいサイトもありますが、まれですね)

ゲームに課金することも、クリアのための効率化なので

似たようなものなのかなぁと思ってみたり。

 

本棚に技術書が増えていくのも結構うれしくて、ゲームでキャラを集める感覚に似ているのかも。

そう考えると、ゲームに課金する人の気持ちもわかるような気がしてきます。

だから私もゲームを始めると、すぐに課金してしまいそうなので、ちょっとやってみたい気もしますが、手を出さないように自制しています。

 

ゲームに課金なんてもったいないと考えるのは簡単ですが、自分に置き換えてみて考えると同じような思考で技術書を買っているので、人は人、自分は自分で好きなことを他人に迷惑かけずにやれてればいいのかなと思います。

今年はあといくら課金するのか、後半もたのしみです。

 

 

   

 

Rubyの勉強を始めて4ヶ月が経ちました

みなさん、こんにちは

 

今年の2月からRubyを勉強を始めて4ヶ月が経ちました。

この4ヶ月間で勉強したことなどをまとめたいと思います。

 

なぜRubyの勉強を始めたか

 実はRubyという言語について何も知りませんでした。

一昨年くらいに、自社にいた同僚が「Ruby面白いよ」と言っていたのですが何それ?程度でした。

ただその同僚は、大手の社内SEに転職し、大幅な年収アップと快適な開発環境を手に入れてました。(最新のMacBookProとiPhone支給、リモートワーク可、使用する技術を自分で選定することができる等)

そんな彼をみて、「Rubyって年収アップに繋がるかも?、よい環境で仕事することができるかも」と漠然と感じてました。

(ただその元同僚は、RubyだけでなくAWS、Docker、Node.js、Vue.jsとかインフラから、アーキテクト、フロントエンドまでなんでもできるフルスタックな能力を持っていたから大幅に年収をあげることができたのですが、、、)

 

それで今年、漠然と自分のスキルに不安を感じた時、新しい技術を習得しようと思い、元同僚の真似をしてRubyの勉強を始めました。

 

Rubyについて調べてみると、Ruby on Railsというフレームワークを使っての開発がほとんどで、スタートアップ企業などでよく使われている、スピード重視の開発が可能、Rubyの開発者が日本人であることから日本語のドキュメントが充実してるなど、学ぶことの利点が多いことがわかり、Rubyを学習することに決めました。

 

まずはRubyの資格取得

まず始めに、前回のブログでも書きましたがRubyを学ぶのに評判のいいチェリー本 を購入し、試験対策本を読破してRubyの資格を取得しました。

Rubyの仕事イコールRailsの仕事の言われているようですが、Ruby基礎から学べばRailsの学習も加速がつくと判断し、Railsは置いといてRubyから勉強しました。

 

資格取得後、Railsの勉強

3月末にRuby技術者認定Silverを取得した後、

4月くらいからRailsの勉強を始めました。

何から手をつけるか色々調べるとRailsチュートリアルが評判がよかったのでこれを進めることにしました。

これが結構ボリュームがあり、4月いっぱいはかかりました。

なんとか終わらせましたが、ところどころ理解できてないところや、覚えていない機能もあり、まだまだ基礎を学習できたとはいいがたい状態でした。

 

Rspecの勉強

RailsのテストフレームワークRspecデファクトスタンダートということで、Rspecの学習をすることにし、電子書籍Everyday Rails - RSpecによるRailsテスト入門』を購入することになりました。

この本は翻訳本なのですが、翻訳者の中にチェリー本の著者の伊藤淳一さんもいたので、きっと良書に違いないと思い、希望価格$23で購入しました。($19から買えるようですが、著者、翻訳者に敬意を評して)

この本も素晴らしく、Rspecでのテスト方法、テスト方針を学ぶことができました。

※この本の書評はまだ時間ある時に書きたいです。

 

今何やってるか

Railsチュートリアルの1周目は終わらせることに集中し、理解できないまま進めた箇所があったので、2周目に入りました。

また、テストはRspecで書くようにしています。

そのほか、SolidusというECサイトのテンプレートを提供してくれるGemの解析や、AWSへのデプロイ方法などを少しずつ進めています。

 

Ruby以外にやったこと

プログラミング自体のスキルをアップするため、デザインパターンリファクタリングを会社の休み時間を利用して勉強しました。

 

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

 

 

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

 

 

あと英語が壊滅的にできないので、通勤中には基礎の文法から勉強し直しています。

 

スキルアップできているの?

正直わかりません。4ヶ月前よりは確実にスキルアップできていると思うのですが、

本やサイトで勉強しているだけで、業務に携わった訳ではないので、自分がどのくらいRubyの技術が向上しているのか試す場所がないためです。

 

今後どうする?

とりあえずRailsチュートリアル2周目を完走した後は、Webサービスを作ってみようと思います。

作ることで自分が何ができて何が不足しているかわかると思います。

私は、筋トレと沖縄民謡が好きなのでそれに関連した何かを作りたいと思っています。

 

以上、4ヶ月のまとめでした。

 

 

 

 

 

 

レビューの低評価の理由が『完全初心者向けじゃない』について思うこと

みなさん、こんにちは。

 

技術書を買う時に、ショッピングサイトのレビューを

見て、買うかどうか決める人は多いと思います。

 

私も技術書を買う場合にはよく参考にしています。

ただ、たまにこの理由で低評価はどうなんだろう?

と感じることがあるのでそれについて書いてみたいと思います。

 

初心者向けだと思ったけど違った

違和感というか残念に思うのがこの理由です。

確かに「やさしい○○入門」とか「初めての○○」とか

入門者向けをタイトルに付けているのに、難解なものは

低評価を付けたくなるのも無理はないです。

 

ただこのタイトルの場合、以下のパターンが考えられます。

A.まったくのプログラミング初学者向け

B.他の言語を習得しているプログラマー向けの新しい言語の入門編

 

で、低評価をつける人は、Aの方々ではないかと思われます。

プログラミングは、ある程度知っている人と、まったく何も知らない人とで

学習を開始するスタートラインはまったく異なります。

例えば、初学者の場合

Ruby勉強始めたけど、出てくる単語がそもそも解らない。

 →クラス?インスタンス?継承?そもそもオブジェクト指向ってなに?

Ruby on Railsを学習したいのにLinuxコマンドなど環境に関する操作出てきて混乱する

 →今どのディレクトリにいるの?、今作ったファイルはどこにあるの? 

などなどあると思います。

ただ、特定のプログラミングの技術書で、そこまで掘り下げるのは難しいと

割り切るのも必要かと思います。

そのような基礎的なところ、環境周りを1から記載していてはページが

いくらあっても足りません。

なのでその辺りは、省略されていてもしょうがないと思うべきです。

 

あらかじめどのレベルの読者を対象にしているか明記している本もありますが、

ショッピングサイトには対象レベルを書いていないことがほとんどです。

絵本などは対象年齢の記載がありますし、技術書もショッピングサイトに対象レベルを簡単に書いていてくれると購入者も分かりやすいのになぁと思います。

 

 プログラマーなりたいなら

 入門者向けの本を買って、難解だからといって低評価をしてしまう気持ちも分かりますが、一度自分のスキルを見直し、どの部分が理解できないのかを掘り下げる必要があります。

実際の業務では全て仕様書やマニュアルに書いてあるわけではありません。

正解がないこと、実現方法が解らないことに対して問題解決していく能力が必要と

なります。

その練習の第一歩として本で理解できないところを、インターネットなどで

検索、勉強会に参加してきくなどして解決することで己をスキルがアップしていくのではないかと考えています。

 

プログラムの勉強は範囲が広く深いです。

最近はオンラインで動画で学習できるサイトもありますし、

低評価を押す前に自分の成長のチャンスと思って頑張りましょう。

 

それでは

 

 

 

 

いかに勉強しないエンジニアになったか

みなさん、こんにちは。

 

エンジニアは日々スキルアップの為に、プライベートな時間に

勉強されている方が他の業種に比べて多いと聞きます。

(プログラミングやサーバーいじるのが趣味で勉強と思ってない方もいるかもしれませんが)

 

ただ私は、システム開発の業界に入ってから、ほぼプライベートで勉強することなく

これまでやってきました。

そのツケが回ってきたのか、37歳の今になって自分のスキルが不安になり今年から

プライベートな時間は、ほとんとプログラミングの学習に費やすようになりました。

なぜ勉強してこなかったのか、どうやって勉強を継続できるようになったかを書いていきます。

 

勉強しなかった理由(言い訳)

飲酒

とにかくこれです。

帰宅したら、妻が料理を用意していてくれるので、ビールを飲みながら食事。

食後はチビチビとウィスキー飲みながらバラエティー番組みて、眠くなったら寝てました。

休日も基本昼から飲んでました。

 

趣味に時間を費やしてた

20代の頃は、カポエイラというブラジルの格闘技を習っていました。

平日の夜間と日曜の午後に練習行っていて、練習のあとは、一緒に習っているメンバーと週3〜4日は飲みに行っていました。

30代になってからは家族で行った沖縄にハマり、三線を買って、カルチャースクールに習いに行ってました。

帰宅したらウィスキーや泡盛を飲みながら三線を練習。

休日はカルチャースクールで三線習うか、子供と公園遊び。

30代半ばからは筋トレにハマり、家でベンチプレスできるように器具を買って

会社から帰って来れば1時間ほどトレーニングをやり、疲れるので夜10時には就寝するようになりました。

また近年は北方謙三歴史小説にハマり、通勤中は三国志水滸伝をずっと読んでました。

 

仕事に高スキルを必要としなかった

これまでSESで常駐してきた現場はそれほど高スキルなことを要求されなかった為、

業務の中で身につけたスキルだけでなんとかこなせてきたので、特に勉強しなくても

やっていけました。

もしかしたらこれが一番の原因かもしれません。

技術に不安がないから趣味に時間を費やしてこれたのかも。

 

なぜこの歳になって勉強を始めたのか

去年(36歳のとき)、そろそろ自分のキャリアを考えたとき、SIerの孫請け会社で

この技術力でこの先大丈夫なのかと、ふと不安になりました。

以前、うちの会社にいた友人と飲む機会が会った時、そいつが喋っている技術用語が

ほとんど知らない単語でした。

GitHub、Heroku、Node.js、RubuOnRails、Vue.js、BootStrap、etc...

本当にGitHubすら知りませんでした、恥ずかしい。

このスキルのまま40代になり、SESで案件が決まらず自社待機➡︎リストラなんてなったら、なんて考えたらいても立ってもいられなくなりました。

 

勉強するためにやったこと

 ノートPCを買う

去年末にMacBookProを買いました。

別にWindowsでも良かったのですが、Windowsは仕事でも使っているし、

Macの操作に慣れておいて損はないと思い購入しました。

ノートPCである理由は、まず勉強会に参加できることです。

これまではディスプレイが小さいので敬遠してたのですが、

本当に買って良かったです。

今では、参加できるもくもく会や勉強会を探して参加するようにしています。

 

酒を飲まなくなった

とにかくアルコールを飲んでしまうと、勉強なんてできないし、やっても忘れてしまうので、飲まないことにしました。

あくまで勉強するために飲まないだけで禁酒ではないのです。

飲み会とかあれば飲みますが、会社の飲み会とかは全部断るようになりました。

帰宅して勉強終わった後に、缶ビール一本くらい飲むようにしてましたが、

不思議なもので、昔は飲めるだけ飲みたかったのに、今では別に飲まなくても平気になりました。

一週間で一滴も飲まない時もあります。

経済的にも健康的にも効果ありますし、酒はなければないほうがいいのかもしれません。

 

趣味をリストラした

週4でやってた筋トレを週3回、一日15分にしました。ボディビルダーになるわけでもないので、最低限筋肉を維持できる量に減らしました。

 

習っていた沖縄三線のカルチャースクールをやめ、楽器を弾かないようにしました。

これもお酒と同じで、やめた訳ではなく、今後余裕ができたときにまたやりたいと思ってますが、人生において絶対に必要なものではないので一旦中断することにしました。

あとテレビもYouTubeも全く見なくなりました。 

 

今どんな感じか

大体毎日2時間くらいはプログラミングの勉強に費やすようになってます。

特にやるぞ!という気持ちがなくても、当たり前のように勉強するようになりました。

誰かが言ってたのか、本で読んだのか忘れましたが、やる気は続かないから習慣化した方が良いとのことです。

うまい具合に習慣化できてると思ってます。

この調子で毎日スキルアップし、リストラされないように、というよりさらにキャリアアップを目指したいと思います。

それでは

Rubyの継承チェーンについてのメモ

みなさんこんにちは。

Rubyの継承チェーンについて勉強したのでメモです。

継承チェーンとは?

Rubyのクラスのスーパークラスを見る、そのスーパークラススーパークラスを見る、をBasicObjectが見つかるまで続ける。
このクラスの道筋が継承チェーンとなります。
Stringクラスの場合だと以下のようになります。

irb(main):001:0> String.superclass
=> Object
irb(main):002:0> Object.superclass
=> BasicObject
irb(main):003:0>


StringクラスのスーパークラスがObjectクラス、ObjectクラスのスーパークラスがBasicObjectクラスとなっています。
ちなみにBasicObjectクラスを見ると

irb(main):003:0> BasicObject.superclass
=> nil

となっているので、BasicObjectクラスが終点であることがわかります。

継承チェーンのモジュールについて

しかしここでクラスの親クラスを返すancestorsメソッドを使用して見ると

irb(main):004:0> String.ancestors
=> [String, Comparable, Object, Kernel, BasicObject]

先ほどスーパークラスで辿った時に出てこなかった「Comparable」と「Kernel」があります。
これらは、クラスではなくモジュールとなります。

モジュールはクラスにインクルードされることで、クラスの継承チェーンに挿入されます。
それではインクルードした場合、継承チェーンのどこに挿入されるのでしょうか?
またインクルードする順番は関係するのでしょうか?
試してみましょう。

module A
end

module B
end

class C
  include A
  include B
end

p C.ancestors


実行結果は

[C, B, A, Object, Kernel, BasicObject]

まず自作クラスのスーパークラスはデフォルトでObjectクラスになるのですが、
インクルードされたModuleがスーパークラスの前に差し込まれています。
またBの方がAより先に来ています、
つまりインクルードすると、
・自分のクラスの後に差し込まれる
・複数インクルードすると後に指定した方が継承チェーンでは先に来る
となります。

ちなみに

module A
end

module B
end

class C
  prepend A       #includeをprependに変更
  include B
end

p C.ancestors

とincludeをprependに変更すると、自分のクラスの後ではなく先に挿入されます。
以下実行結果です

[A, C, B, Object, Kernel, BasicObject]

Cより先にAが来ていますね。

このようにインクルードする順番は、includeを使うかprependを使うか、
includeの場合は、上に書くか下に書くかで変わって来ます。
モジュールをインクルードしてメソッドを書き変える場合などに意識するようにしようと思います。

参考にした文書は以下になります。

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

それでは