参考になった記事

ruby-style-guide

英語
github.com

日本語
github.com

半年ほどRubocop使ってるので、6ヶ月間このスタイルに沿って書いている事になる。(最初はガンガン指摘されてた…)
ちょこちょこ読んでるけどこの書き方badなんだーとかこれgoodなんだーとか思ったり。

後、cookpadでもスタイルガイドが公開されてる。
こっちは読んでなかったんだけども、この前上司がオススメしてたので読んだ。
(短いから読むのもそんなに時間もかからなかったし、記憶力無いからちょくちょく参考に読むつもり)

初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」

qiita.com

タイトルの通り、初めて正規表現に触れる人にわかりやすく丁寧に、順序立って書かれてる。
この記事を書いてるJunichi Itoさんはプロを目指す人のためのRuby入門という本を書かれていて、それ経由でこの記事の存在を知った。*1

新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則

qiita.com

もう2年目なので新人じゃなくなったけど、ぼけっとすると途端に雑になるマンなので意識していきたい。

Ruby】よく使うFileクラスを使ったファイル読み込み処理

qiita.com

仕事でファイル読み込み処理を書いたので。
他の人はどんな風に書くんだろーと気になる質なので調べたところこの記事がヒット。
へ~こんな書き方あるんや~ってなった。(感想)

Chromevimライクに使えるようにするvimium

qiita.com

同僚が教えてくれた。
気に入って職場と自宅両方インストール済。ありがとう。

*1:正規表現の章で、全く知らない人向けに参考文献としてこのQiita記事が挙げられている

Sinatra ルーティングとかテンプレートとか

Sinatra: README (Japanese)

ルーティング

複数のマッチングパターンに同じ処理を設定したい時

  • 配列にパターンを渡して回す
['/article/:num', '/article/entry/:num'].each do |path|
  get path do
    # 処理
  end
end
  • 手続きオブジェクトを渡す
article = lambda do
  # 処理
end
get '/article/:num',  &article
get '/article/entry/:num', &article

POSTも実装したい時はpost 'hoge', &fuga

ビュー/テンプレート

一部の処理が同一で、渡すテンプレートが一緒の場合
(似たような画面を量産する時など)

get '/hoge' do
  # 処理
  # /fugaと重複する処理
  erb :piyo   # views/piyo.erbを渡す
end

get '/fuga' do
  # 処理
  # /hogeと重複する処理
  erb :piyo   # /hogeと同じくviews/piyo.erbを渡す
end

こういう時には、

# どこかに定義
def piyopiyo
  # 重複する処理
  erb :piyo
end
get '/hoge' do
  # 処理
  piyopiyo
end

get '/fuga' do
  # 処理
  piyopiyo
end

↑でちゃんとテンプレートも渡される。


後ビューに値を渡す時、ローカル変数をテンプレートに渡すこともできる。

get '/hoge/:value' do
  value = params['value']
  erb :hoge, locals: { key: value }
end
# hoge.erb
<%= key %>

↑でvalueの値が表示される。
でも実際はインスタンス変数を定義してビューで使った方がいいらしい。
他の人がソースを読んだ時、ぱっと見でメソッドか変数かわからなくなるからとのこと。

<%= @hoge %>
<%= @fuga %>
<%= piyo %>
<%= piyopiyo %>
<%= key %>

たしかに。

Developers Summit 2018に参加してきました

f:id:igrc:20180217000750j:plain

event.shoeisha.jp

トイレで川が流れてるよ、橋がかかっているよという話を聞いていたので密かに楽しみにしていたんですが、川があるトイレを見つけられないまま帰ってきました。

とりあえず、デブサミのアウトラインを書き残しておきたく。
以下参加セッション

【16-C-1】実況パワフルモブプログラミング - Rakuten Super Englishにおけるモブプログラミングという働き方 -

ちょっと遅れて入場したのですが、立ち見勢が壁沿いにズラっと並んでいて大盛況。
「モブプロは朝から帰るまでやる」
「代わりたくなったら代われと言って代わる」
「うまくいったらやったーという」

質疑応答では以下のようなやり取りがありました。
Q「相性が合う人と合わない人がいると思うのですが、モブプロだとあんまり関係ないんですかね?」
A「モブプロだから関係ないとかはなくて、むしろ仲悪かったら顕著に出る。ずっとコミュニケーションしているので。」

ですよねー。
とはいえこれはデメリットだけではなくて、相性がわかりやすい形であらわれることにもモブプロの価値があるんじゃないかなあ(というような話もされてた気がする)
後は一日の振り返りを行うことが重要などの話をして終了。

凄くいい話でした。
モブプロが実践できる環境があればよりキャッチアップしやすくなるんだろうなあ。
暗黙知は何が暗黙知かわからないから暗黙知」その通りだと思いますし、学びの機会も共有しやすいモブプロには魅力を感じます。
今はできないけど。。。

以下スライド。 speakerdeck.com


【16-C-2】【全員参加型】Botで専属トレーナー・栄養士を雇う世界が来ています。先進の擬人化技術を今日、体験しよう。

いきなり腕立て伏せとショルダープレスが壇上で催されたのが印象的でした。(帰る時あのダンベル持って坂登るの辛そう)

Lineチャットボットを利用した食事管理とトレーニング管理の披露後にスマートスピーカーを利用してのトレーニング管理へ。
Clova FriendsではなくGoogleHome miniが登場。
GoogleHomeとLineチャットボットでやってることも文言も一緒だなーと思っていたら、シングルインスタンスで処理しているとのこと。
登壇している中嶋さんがbot-expressというフレームワークを開発して、このチャットボットを作ったということです。 github.com



刺さった一言は「webのほうが得意なことをbotでやらないこと」


GoogleHomeは私も持っているんですが、コマンド発声後のレスポンスにやや難があるので、このあたりはこれからどんどん良くなるといいなあ。

以下スライド。

www.slideshare.net


【16-E-L】大規模ログ集約実現のためのアーキテクチャ~誰でも美少女になれるVRシステム「VR Live Studio」からお届け

f:id:igrc:20180217000920j:plain f:id:igrc:20180217000929j:plain

美少女=ユニティちゃん。
正直言うとスライドより美少女の方に目が行ってました。
ただVRでやるメリットは充分あると思っていて、直接身振り手振りでスライドの項目を指せるし、何より視覚的に楽しめるので飽きない。
実際会場も盛り上がっていました。(シャッター音が他の会場の10倍ほど鳴っていたように感じた。)
ユニティちゃんになってプレゼンしたい人生だった。。

公開スライドは見つからず。

【16-E-3】加速するフロントエンドとPWA

「虚無は早い」 立ち見が多く盛況。
セッションの後半からの参加だったため割愛。

以下スライド。 speakerdeck.com


【16-D-4】ソフトウェア開発30年史を振り返りつつ考えるプログラマにとって変わらないもの

インターネット老人会(というワードがあるらしい)向けセッションのようでしたが、「意外と若い人が多くてどうしよう」と仰っていました。
歴史を振り返る、大学の講義を連想させる内容でした。
結論は以下のツイートで説明されています。


【16-E-5】Swaggerを使ってPHPエンジニアとUnityエンジニアがもっと仲良くなった話

資料は後日共有。
実務に通じる話で非常にタメになりました。
業務で使えるかというとまた別の話ですが。。

【16-C-6】The Amazon Way~Amazonのソフトウェア開発~

撮影禁止、スライド公開なし。

  • アマゾンで共有されてる考え方

  • サービスを開発する際にプレスリリースを書くなど。

【16-E-7】クリエイター仲間3人で商用レベルのVRゲームを個人開発した話(仮)

「時間は金で買える」
このVRゲームとは、おじさんでも誰でも女児になって着せ替えや(見た目は)女児とチェキを撮ったり楽しめるVRゲーム「ハッピーおしゃれタイム」のこと。

セッション内容は、趣味開発に注ぐ時間とモチベーションをどのように捻出するかという話。
「承認欲求」が一番のモチベーションだというのには共感できました。
モチベーションが他者依存なことによる問題も当然ありますが、ここではメリットの方が大きい状態。

スライドは以下から。


書籍販売ブースでは、翔泳社オライリーのブースがあり、アルゴリズム図鑑等のサイン本が置かれていました。

f:id:igrc:20180217001439j:plain

この前買ったばかりのO'Reilly Japan - 退屈なことはPythonにやらせようが安く売ってましたが気にせずベタープログラマを購入。
10%オフは嬉しい! 動物が印刷されたトートバッグも買おうか悩みましたが、結局買わずに帰宅。

反省点としては間食を用意すべきでした。
ランチセッションでは美味しいサンドイッチが提供されたのですが、途中でお腹が空いて、配られたラムネをかじってしのいでました。。

余談ですが会場を移動する際、若い人にビラを渡しているブースがあったのですが、後で内容を見てみたら求人のビラでした。(なるほど、おじさんに渡してなかったわけだ)
ちょっと興味があったので求人について調べてみたんですが、一年以上の設計・開発経験を要件にしてるところが結構多かったです。
満たしてないですね。残念。

おわりに

はじめて参加したデブサミでしたが、楽しかったです。
セッションで聞いたこと全ては活かせないしわからないことだらけだけれど、気付きも多かったので来年もぜひ行きたい。

セガのWebアプリ実例

Ruby on Railsで作成されたWebアプリの実例が紹介されていたのでメモ。

techblog.sega.jp

上記のアセットライブラリやボット管理ツールは、この「Ruby on Rails」のバージョン4で作成し、このようなひな形から肉付けして発展させたものです。そして、その作業を助けてくれるのがRubyGemsです。

画像付きでこうやって実例を載せてくれるのは嬉しいですね。
勉強になります。

Ruby Hash#keyが返すキーの順序は不定?

  • 生成時の要素順
  • Hashクラスのメソッドが返す要素の順番
  • 1/17追記

Python3について調べていたら、辞書(dict型)の順序は不定*1という一文を見つけました。
以前「RubyのHashの順番」について調べていた事を思い出したので、忘れないようにメモ。

続きを読む

PATHの通し忘れで苦しんだメモ。

igrc.hatenablog.com ↑で苦しんだ後の話。
基本的な話だと思いますが私は苦しんだのでメモ。

OpenSSLでドタバタしてたら以下のエラーが出るようになってました。

# openssl version
openssl: symbol lookup error: openssl: undefined symbol: CMS_Attributes_Verify_it


とりあえずPATHを確認。

$ which openssl
/usr/local/bin/openssl

# /usr/local/bin/openssl version
/usr/local/bin/openssl: symbol lookup error: /usr/local/bin/openssl: undefined symbol: CMS_Attributes_Verify_it

# /usr/bin/openssl version
OpenSSL 1.0.1f 6 Jan 2014


/usr/bin/opensslにPATHを通せばいいみたいです。
PATHを設定します。

$ PATH=$PATH:/usr/bin/openssl
$ export PATH

$ which openssl
/usr/local/bin/openssl

???
パス(PATH)の確認と設定方法は? - Pocketstudio.jp Linux Wiki をちゃんと読んだら、

パスの優先度は左の方が『 優先 』されます。  コマンド『 echo $PATH 』あるいは『 env | grep PATH 』で出てきた左が優先されます。
たとえば、/usr/local/bin/perl と /usr/bin/perl があるとします。
環境変数 PATH で /usr/local/bin の方が優先されると、実際に実行されるコマンドは /usr/local/bin/perl となります。

としっかり書いてありました。
これを踏まえてやり直します。

$ which openssl
/usr/local/bin/openssl

$ PATH=/usr/bin:$PATH
$ export PATH
$ which openssl
/usr/bin/openssl

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014


できました。
ただ、これだけではログインする度にパスを設定しなおさないといけないので.bash_profileexport PATH=以降に/usr/binを記述します。
先頭に記述するとその後ろに記述されているrbenvのPATHも書き換わるのでやめておきます。

PATHの優先順位を意識していて、ちゃんとコマンドの意味を理解していればしないミスでした。
気を付けます。