ゆとり日記

心にゆとりを持って生きたいプログラマーの雑記です。気が向いたら書きます。

Railsを始めて一ヶ月半経ったので振り返りをする

「Webアプリケーションエンジニアになるぞ!」という意気込みで事業会社に転職し、Railsのプロダクトコードを書き始めて少し経ったので現状を振り返ってみる。

プロダクトコードでRailsを書いてみての感想

なかなかに楽しい。

設計を本格的に考えると答えは出てこないし、プロダクトコードはがそもそも複雑だし、PullRequestのレビューは厳しいし・・といった感じで頭を抱える事案は多いものの、自分の血肉となっているので良しとする。

実戦に入るにあたってやったこと・やっていること

定番のサイト達

  • Railsチュートリアル

    • Railsにもなかなか慣れなかったけど、Rubyの文化になかなか慣れることが出来ずに苦戦。
    • 1回の挫折を挟み、完走まで1ヶ月以上かかった。
  • Railsの教科書

    • Railsチュートリアルよりも内容がコンパクトだったので、一時期こっちに逃げていた。
    • 感覚をつかむには、まずこっちをやった方が良かったかなと今では思っている。
  • Ruby on Railsガイド

    • ActiveRecordがイミフ過ぎたので、ここのActiveRecordの基礎を何度も読んでいた。
    • ルーティングの書き方が分からなくなった時も戻ってきている。

この辺りの定番をやりつつ、最初はRailsの感覚を養うことから始めた。適当にググった情報を拾い読みしていると、断片的な知識が混ざって混乱してしまうので、しばらくは情報を意図的にシャットアウトしていた。

その他にやったこと

  • プロになるためのRuby入門

    • Railsを理解するにはRubyを理解しないといけないと感じたので、この本で入門していた。
    • moduleとclassの使い分けなど、モヤモヤしていた部分を解消出来て非常に助かっている。
    • Railsを始める人はとりあえず買った方が良いと思う。
  • Everyday Rails

    • rspecの記法に全然慣れることが出来ず、この本を見つつrspecの練習をやった。
    • contextの粒度を大きく過ぎてしまったり、subjectの挙動に毎回混乱させられたり、コードをDRYにしすぎてしまったりと苦戦はしているが、少しは慣れた気がする・・。
    • 困ったときは、とりあえずQiitaの参考リンクを見ている。

使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita

実戦に入ってみて感じていること

とにかく設計に悩む事が多い。

特に最近悩んでいるのが「controllerがファットになった時の対処法」。Viewに渡す情報が多い画面を作っていると、あっという間にcontrollerの処理が膨らんでしまい、対処法で毎回悩んでいる。

techracho.bpsinc.jp

迷った時は、ひとまず↑を見つつ考えることにしている。とはいえ、「View Objectでどこまでの事をやっていいのか」を理解できずに現在進行形で悩んでいる。

設計の話で進展があれば、またブログに纏めてみようと思う。

新しくみかけたビールを普通に呑む

はい。Beer Advent Calendar 2017の8日目です。

30歳になってからというものの、1日に2缶空けて晩酌するのが当たり前になってしまった僕が8日目を担当します。

本日のビール

今日はたまたまコンビニで見かけた「キリン ブラウマイスター」というビールを飲みました。

f:id:rukiadia0401:20171207204657j:plain

どうやら、セブン&アイグループで限定発売らしいですね。

感想

普通の一番搾りと比べると少し苦め。味はサッポロ黒ラベルに近い印象で個人的には好きな味です。

程々の重厚さで飲み飽きないので、今週はこればかり飲んでる未来が見えます。

オチは

ないです。酔っ払いの駄文です。

webpackでjQueryに依存したライブラリを含めてビルドする

概要

jQueryに依存したライブラリを含めつつ、webpackでよしなにbundleする必要があったのでやってみた。

試した環境は以下の通り。

webpackは「npm install --save-dev」で、jQuery系は「npm install --save」でインストールしておく。

configとかを簡単に書く。

webpack.config.js

const webpack = require('webpack');

const config = {
  entry: './src/index.js',
  output: {
    path: `${__dirname}/`,
    filename: 'bundle.js'   
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery'
    })
  ]
};

module.exports = config;

pluginsの箇所にProvidePluginの記述を追加。$にjQueryを入れてもらうように設定する。 bundle.jsの吐き出し先は好きに変えちゃってください。

index.js

// ProvidePluginで$に入れているので
// import $ from 'jquery'; の指定は不要
import 'jquery.cookie';

$(function(){
  // $にjquery.cookie.jsの処理が入っているか試す
  $.cookie("name", "myname", { expires: 7 });
});

これをwebpackでビルドし、htmlを適当に作って、bundle.jsを読み込めばcookieが書き込まれているのを確認出来ると思います。

参考にしたページ

https://webpack.js.org/plugins/provide-plugin/

公式のドキュメント読むのが一番手っ取り早かったです。

転職してしばらく経ったし、手元の開発環境を少しずつ見直す

事業会社に転職して3ヶ月弱が経った。

相変わらずフロントエンドエンジニアをやっているわけですが、PHPとかRubyとかも触る機会が増えたり iTerm2を開いている時間が増えたりしていたので、普段使っている道具を見直す事にした。

WebStormからIntelliJ IDEAに乗り換え

前職でReact +Reduxをやっている時はWebStormで良かったわけですが、そうもいかなくなった。 そういうわけで、入社のタイミングで個人ライセンスを購入した。

※会社で買ってもらえなかったわけではなく、申請とかが色々面倒だったです。

Railsの勉強が落ち着いたら、これでKotlinの勉強も円滑に始められるのでサイコー!って感じです。

bashを使うのを止めた

会社が変わったら、周りにbashを使っている人が全然いなかったので変えることにしました。

周りの人にはzshを勧められたのですが、「ここはあえてfish shelklかな・・」という反抗的な精神が働いたのでfish shellを入れました。 クラスメソッドさんの参考記事を見つつ、fishermanとzを入れて使ってみている感じです。

三連休でちょくちょく手を動かしている内に徐々に慣れてきたので、仕事で使うのが今から楽しみで仕方ないですね。

メモアプリをInkDropに変えた

  • 仕様に関するちょっとしたメモを残す
  • ちょっとしたサンプルコードを書き残す

業務でコードを書く上でメモを残すことが欠かせなくなりつつあるのですが、しっくり来るメモアプリに出会えずにいました。

Macの標準メモアプリを使っても良いのですが、それだとコードを書くには微妙です。 ちょっとした事を書くために、社内のconfluenceを開くのもだるいです。

悩んだ結果、「やはりマークダウンだよね」ってことでInkDropを使うことにしました。

使い始めて2日しか経ってないですが、今のところ何の不満もなく快適に使えているので、トライアル期間の60日が過ぎたら普通に課金すると思います。

自分でmarkdownエディタを作るモチベはない

感想

不要なストレスが減り、快適に開発が出来ているなーという印象です。

今後も理想の開発環境を目指して、色々とチューン・アップしていこうと思っています。

Rubyの練習のためにProject Eulerを始めた。

  • 今いる会社がRailsメインだけど、Rubyに関してはド素人過ぎる。
  • 「週一でProject Eulerの問題を解く」みたいな集まりが会社で始まったが、何の言語でやるか悩んでた。

↑のような背景があって、Project EulerRubyの練習の場とすることにした。 どこにコードを載せていくかは決めていないが、qiitaかGitHub辺りにひっそりと載せていくつもり。

進捗

周りからRubyのアドバイスを貰いつつ、4問目を解き終わった辺り。とはいえ、ただ解いただけで処理速度とかは全然考慮できてない。

一応、ここに問題とコードを載せてみることにする。

左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である. では, 3桁の数の積で表される回文数の最大値を求めよ.

def palindrome? (number)
  number.to_s == number.to_s.reverse
end

palindrome_array = []
(100..999).each do |i|
  (i..999).each do |j|
    result = i * j  
    palindrome_array << result if palindrome?(result)
  end
end

puts palindrome_array.max

重複した計算を排除したり、eachの繰り返しを降順にするだけでも大分変わってくる気はするものの・・正直苦戦している。

目標

20問目まで解くのを、とりあえずの目標にしておく。頑張っていくぞ。

Frontend de KANPAI! #01 に行ってきた感想

frokan.connpass.com

ブログ枠で参加してきたので、ブログを書く。

参加してみての感想

面白い話は多かったけど、次回開催があってもたぶん行かない。理由は後述。

KeynoteとLTについての感想

Keynote3本 + LT7本という構成で、合計で90分くらいでした。惹かれる内容もいくつかあったので、感想を述べます。

Keynote

あと3年フロントエンドでやる力

イタリアンレストラン、Webの受託会社で働いてきた人が30歳でDeNAに入り、普段どんな事を求められながら働いているのかという話を聞いた。「最初に求められたのがスタイルガイドの作成だった」という話を聞いて、実際にどういう運用をしているのかを深掘りして聞いてみたい気持ちになった。

FrontEnd:DDD - フロントエンド実装のコアドメイン

  • 早口 + 声が小さくて、話が聞き取れず。(マイク音声が篭っていたような気もする)
  • スライドの文字が小さくて全然読めなかった。

上記のような感じだったので、内容が全然頭に入ってこなかった。

keynoteの中では一番惹かれるタイトルだっただけに残念。スライドが公開されるなら、見返したい(ヽ´ω`)。

MobXではじめるReactiveアーキテクチャ

名前は知っていたものの、MobXの話をちゃんと聞くのは初めてだった。

「stateという単語が出てきたので、Reactに似てるといえば似てるのか・・?」という印象を受けた。「observableが理解できれば、すんなり入っていける」的な話だったので、自分で手を動かしてみようと思っている。

LT

この先生きのこるためのPostCSS実践入門

まあ、autoprefixer使うくらいで十分だと思う。

個人的に、今はCSS4とかの先取りをするモチベーションが無いので、PostCSSのオレオレ構成を作る気も無い・・。

フロントエンドで大切なことはAuditから学んだ

Chrome60で大幅に機能追加があった、DevToolsのAuditsパネルの話。

  • PWA化がどれくらい出来てるか
  • 画面が表示され始めるまで何秒くらいかかったか(WebPageTestの結果で見れるようなやつ)
  • アクセシビリティの計測
  • 改善のためのヒント

などが見られるようになる。Canaryの最新版が既に61とかなので、そっちで試せる筈。

「Webの品質」について考え直すきっかけになるとも思うので、気になる人は発表資料に目を通そう。

Webフロントエンドで大切なことは全てAuditsが教えてくれた

今日から始めるShader

WebGLとかthree.jsとかそっちよりの話。

AndroidJavaをやっていた時にOpenGLを勉強していた事もあって、個人的に凄く惹かれる内容。 しかし、5分で収めるにはディープだった感が否めなかった。別の機会があれば、もっと深い話も聞いてみたい。

https://www.shadertoy.com/

GLSL Sandbox Gallery

↑この辺で遊んで見ると楽しそう。

Hello,Fire!

Firebaseでチャットルームみたいのを作ってデモをやっていた。近くで内部の社員っぽい人達がワチャワチャ喋っていて、あまり発表者の声が聞けなかったのが残念。

FirebaseでSlackチックなものを雑に作るのは楽しいかもなーと思いながら、デモを眺めてました。

AndroidとWeb

「フロントエンド開発、iPhone基準で考え過ぎ問題」がテーマのLT。

  • MediaSession API
  • Payment Request API

↑の辺を紹介しつつ、PWA化の実装を今から始めていこう的な話が聞けて面白かった。

ただ、日本ではiOSのシェアが大きい事もあり、普段からPWA化の時間をどれくらい確保できるかが悩みのタネな気がする。

フロントエンドを1つの職能として見た場合

  • 専門家少なくない?
  • マインドもバラバラ(片手間にやっている人もいますし)
  • 目的と手段が間違っていることがある ⇒ 「jQueryやること自体がダサい」みたいな風潮

↑みたいな導入から始まったLT。社内でも「jQueryやりたくないです(流行りな事をやりたいだけ)」みたいな声はちょくちょく聞くので、共感出来る所はある。

  • 環境構築とかに時間をかけない。
  • 楽をすることに時間をかけすぎない。
  • 始めることに時間をかけない。

↑みたいな話にも触れていて、自分としても耳が痛い話があった。

これからは、チュートリアルを一通りやるだけで満足せずに何かしら形にしてアウトプットすることを心がけたいと思う。

あと16年活躍しようと思います

  • 興味を持った技術はひとまず触って、知識や技術のネットワークを広げる。
  • 結果を残す。
  • 仕事の事を人に伝える。
  • 健康は大事。

Web業界に20年近くいるベテランの方から、↑みたいな話を聞けた。

「知識や技術のネットワークを広げると、どんどん面白さを感じられるようになっていく。」って辺りには凄く共感。触っていく内に徐々に慣れてきて、やれる事が広がると楽しくなるもんだと自分でも思っている。

参加してて気になった箇所

KeynoteやLTは非常に楽しめたのだが、「LT + 懇親会」という構成は辛かったように思える。

「静かに発表者の話を聞きたい人」と「おしゃべりをして懇親したい人」が混在しつつ、「静かに発表者の話を聞きたい人」の方が割合多めだった気がするので、空気が少し重かった。

個人的に一番気になった(というか不快だった)のが、発表中に社員っぽい人達が雑談してる声が聞こえてきた事。発表を聞かないのは自由だと思うけど、それならそれで静かにしてて欲しいと思った。Keynoteの時間からそんな感じで、イベントに参加して嫌な気分になったのは久々だった。

「次回開催があってもたぶん行かない。」と思ったのはこの辺りが原因。お疲れ様でした。