楽しいだけで十分です

好きなことを書きます

Webエンジニアの仕事を始めて、1年間で読んだ技術書

Pepabo Advent Calendar 2017の10日目の記事です。

Webエンジニアの仕事を始めて1年が過ぎたので、どんなことしてたか振り返ってみようと思い、読んだ技術書をまとめる。

技術書を読む基準

技術書は、次の2つの観点から読むかどうか判断している。

  • 知識の土台を作る
  • 仕事で使うものを優先する

知識の土台を作る

仕事始めてすぐの頃は、「ネットで調べても、そもそも調べた先に書いてあることがわからない」ということがよくあった。 原因として、行間にある基礎知識が自分にはないのだろうなと思って、基礎を固めて知識の土台を作れるようにしようと意識していた。 また、知識の土台があれば、変化の速い技術でもキャッチアップはできるはずと考えてる。

逆に、興味はあるが、知識の土台にならなそうなものはやらないようにしてた。 例えば、JSのフレームワーク/ライブラリなどに関心はあるが、あまり追わないようにしてた。

仕事で使うものを優先する

Webエンジニアとして仕事をしているので、その中で必要になった技術は、知識の土台を作ることに繋がるかどうかとは別軸で優先していた。 そのため、半端なところまでしか読めてないけど仕事と直結する勉強じゃないので、放置するということはあった。

ただ仕事と直結しない内容でも、ちゃんと理解しておく方がよさそうと思って2週以上読んだものもある。 この辺りのバランスは、今後も考えながらやってくことになりそう。

読んだ本のカテゴリ

主観で分類したので、違うカテゴリにあってもあしからず。

ネットワーク

基礎からわかるTCP/IP ネットワークコンピューティング入門 第3版

基礎からわかるTCP/IP ネットワークコンピューティング入門 第3版

  • ネットワークと、それに関連するコンピュータの内部構造を説明している本
  • アプリケーションより下のレイヤーを学びたいと思った時に、よさそうだと思って読んだ

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

  • ブラウザからWebサーバーへリクエストを送るまでに何が行われているかを、順序立てて解説してくれる本
  • アプリケーションより下のレイヤーを学びたいと思った時に、よさそうだと思って読んだ

[改訂新版] 3分間ネットワーク基礎講座

[改訂新版] 3分間ネットワーク基礎講座

  • OSI参照モデルのレイヤーごとに、ネットワークの仕組みを解説してくれる本 (特に1 ~ 4のレイヤーについて解説されている)
  • さらっとネットワークの基礎を学びたくて読んだ
  • 図解が多く、口語体の文章が自分には合って読みやすかった

ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール

ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール

  • パフォーマンスを改善するための14個のルールが説明されている本
  • パフォーマンスを意識したことがなかったので、勉強してみようと思って読んだ
  • FOUCなど知らなかったことも多く、ブラウザのレンダリングの処理などの理解も必要だなと感じた

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

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

  • Webを支える技術(HTTP, URI, HTML)を軸に、Webの技術について説明している本
  • Webエンジニアなので、基礎として抑えるべき部分だろうなと思って読んだ
  • 社内で勉強会を開いており、まとめ資料はこちら https://github.com/yinm/study_meeting/tree/gh-pages/webtech

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

  • HTTPの歴史を辿りつつ、Go言語を使ってブラウザの実装することで、Web技術への理解を深める本
  • Webを支える技術を読み終えた後に、続きで勉強するのによさそうだと思って読んだ
  • こちらも社内で勉強会を開いている。まとめ資料はこちら https://github.com/yinm/study_meeting/tree/gh-pages/realworld-http
  • Goは初めて書いたが、一応なんとかなってる気がする

3分間HTTP&メールプロトコル基礎講座

3分間HTTP&メールプロトコル基礎講座

  • メールのプロトコル(SMTP, POP, IMAP)の名前は知っていても、どのような動きをするのかを知りたくて読んだ
  • 他の3分シリーズと同じで読みやすい

3分間DNS基礎講座

3分間DNS基礎講座

  • 仕事でドメインに関連する開発をした時に、そもそもDNSの仕組みがわからないので知りたいと思って読んだ
  • 「Aレコードって何なの?」ってくらいの知識で読んでも、読み終わった後には各種リソースレコードの意味がわかるくらいにはなれる
  • この本読んだあとは、digコマンドの使い方(結果の読み方)をネットで補足した気がする

超速!  Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus)

超速! Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus)

  • パフォーマンス計測の方法や、ChromeのDev Toolってそうやって使うんだみたいな発見が多くてよかった

Java

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

  • サンプルコードがJavaで書かれてる本を読む時に、Javaが知りたいなと思って読んだ

JS

  • JSの基礎から学べる本
  • JSの入門書は何冊か読んだが、仕事でJSを書くときはこのレベルくらいの本読まないと使い物にならない印象を持っている

  • Electronでアプリを作ってみたくて読んだ
  • Markdownエディタなどが作れて面白いが、Reactがわからなくて一旦放置してる

gihyo.jp

  • ES6の特集を読んだ
  • ES6がどんなものかを知るのにちょうどよかった

パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)

  • WebSocketなどの説明があり、よさそう思って読んだ

サーバサイドJavaScript Node.js入門

サーバサイドJavaScript Node.js入門

サーバサイドJavaScript Node.js入門

  • Node.jsがどんなものか知りたくて読んだ
  • この本を見ながら、npmのmodule作ったりした

実践Node.jsプログラミング

実践Node.js プログラミング (Programmer's SELECTION)

実践Node.js プログラミング (Programmer's SELECTION)

  • Node.jsがどんなものか知りたくて読んだ
  • 翻訳が「うーん」と思うところがあったり、内容がわかりにくいと思って読むのをやめてしまった気がする

ブレイクスルーJS

  • JSで動作するアプリを書いてみようと思って読んだ

Node.js 超入門

Node.js 超入門

Node.js 超入門

  • タイトルの通り、Node.jsの初歩しかやらない本だがわかりやすかった

シングルページWebアプリケーション ―Node.js、MongoDBを活用したJavaScript SPA

シングルページWebアプリケーション ―Node.js、MongoDBを活用したJavaScript SPA

  • SPAをJS(jQuery)で、ハンズオン形式で実装する本
  • SPA向けのフレームワークを使っても、何を楽にしてくれるのかが分からずに使えなかった経験があるので、このあたりを読んでからフレームワークに戻るといいのかなと思って読んでる

開眼!  JavaScript ―言語仕様から学ぶJavaScriptの本質

開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質

  • JSのはまりどころ(thisなど)を、少ないページ数で解説されていてよさそうだったので読んだ

PHP

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

  • この本のおかげで、プログラミングができるようになったと思うくらい感謝している本
  • JSと同じくPHPも入門書を何冊か読んだが、仕事でPHPを書くときはこのレベルくらいの本読まないと使い物にならないと思っている
  • フレームワークを作成する章は必読

PHPフレームワーク Laravel入門

PHPフレームワーク Laravel入門

  • Laravelがどんなものか知りたくて読んだ
  • validatorやEloquentなど仕事で使ってるライブラリも出てくるので、役立った

Ruby / Rails

  • 仕事でRuby(on Rails)を書くことになったので読んでる
  • Rubyの特徴・他の言語との違いがわかりやすく説明されている

改訂2版 パーフェクトRuby

改訂2版 パーフェクトRuby

  • 仕事でRuby(on Rails)を書くことになったので読んでる
  • ただ、「プロを目指す人のためのRuby入門」が出たので今は放置中してて、後から気になったところを読もうかなと思ってる

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

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

  • 仕事でRuby(on Rails)を書くことになったので読んでる

Go

スターティングGo言語

スターティングGo言語

  • Real World HTTP を読むためにGo言語を勉強しようと思って読んだ
  • 一応この本を読む前に、A Tour of Goも読んだ
  • ただ、構造体やポインタなどが分からず、途中から読んでない

C

Cの絵本 第2版 C言語が好きになる新しい9つの扉

Cの絵本 第2版 C言語が好きになる新しい9つの扉

  • Goで構造体などが分からなかったので、C言語の入門書読んだら理解できるかなと思って読んだ
  • ポインタとかを勉強すると、普段書いてるLLはいい感じに隠蔽されてるんだな〜、楽させてもらってるんだな〜と思った

サーバー

  • Linuxコマンドをさらっと勉強したいなと思って読んだ
  • ただ、そこまで印象に残ってないから、あんまり勉強にならなかったかも...

Docker実戦活用ガイド

Docker実戦活用ガイド

  • Dockerで、自分で開発環境作ったりできるようになりたいと思って読んだ
  • ただ、ところどころ古くなってる記述があって、結局公式サイト見ながら勉強した気がする

  • 同上

できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応 (できるPROシリーズ)

できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応 (できるPROシリーズ)

  • Apacheのサーバーを自分で立てたり、設定ファイルの記述が理解できるようになりたくて読んだ

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

  • 同上

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)

  • Nginxのサーバーを自分で立てたり、設定ファイルの記述が理解できるようになりたくて読んだ

nginx実践ガイド (impress top gear)

nginx実践ガイド (impress top gear)

  • 同上

OpenSSH[実践]入門 Software Design plus

OpenSSH[実践]入門 Software Design plus

  • sshコマンドがよくわからず、この本ならわかるかなと思って読んだ気がする
  • ただ、ネットワークなどの知識が不足しており、あんまり理解できなかった気がする... (今読み直したら理解できるかな)

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

  • シェルのカスタマイズに凝ってた時に、シェルスクリプトを読み書きできるようになりたいと思って読んだ

  • LinuxC言語の勉強になってよさそうだなと思って読んだ

Linux教科書 LPICレベル1 Version4.0対応

Linux教科書 LPICレベル1 Version4.0対応

  • Linuxの仕組みを理解したいと思って読んだ
  • 来年は、LPIC101取得したい

github.com

  • 仕事でPuppetを触る機会があったので読んだ
  • 内容的に古くなっている部分もあるが、ハンズオン形式で学べるのがよかった
  • この本と、「Puppet活用ガイド」などを読んで、社内の勉強会で発表した ゆるく始めるPuppet - 2017.10.24@第4回EC事業部TechMTG

Puppet[設定&管理]活用ガイド

Puppet[設定&管理]活用ガイド

  • 同上

ターミナルマルチプレクサ tmux 入門

ターミナルマルチプレクサ tmux 入門

実践 Vagrant

実践 Vagrant

  • Vagrantの使い方を知りたくて読んだ
  • 内容が古かった(Configuration Versionなど)ので、あんまり役立たなかった気がする

DB

基礎からのMySQL 改訂版 (基礎からシリーズ)

基礎からのMySQL 改訂版 (基礎からシリーズ)

  • MySQLの基本を勉強したくて読んだ
  • ただ内容が易しいので、もうちょっと踏み込んだ本を読みたいなと思ってる

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

  • テーブルの設計の勉強をしたくて読んだ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

  • 同上

テスト

  • TDDってなんだろうなと思って読んだ

経験ゼロでもできるプログラミング現場の単体テスト

経験ゼロでもできるプログラミング現場の単体テスト

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

初めての自動テスト ―Webシステムのための自動テスト基礎

初めての自動テスト ―Webシステムのための自動テスト基礎

  • 自動テストの概要を掴みたくて読んだ本
  • 自動テストを3種類 (UI, 統合, ユニット) に分けて説明しており、非常にわかりやすかった

leanpub.com

設計

PHPによるデザインパターン入門

PHPによるデザインパターン入門

ゼロからわかる UML超入門 [改訂2版] (かんたんIT基礎講座)

ゼロからわかる UML超入門 [改訂2版] (かんたんIT基礎講座)

Web API: The Good Parts

Web API: The Good Parts

  • 仕事でWeb APIを開発することになったので、お作法などが知りたくて読んだ

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

正規表現

  • 正規表現が全く書けなかったので読んだ
  • ハンズオン形式で学べるのでよかった

反復学習ソフト付き 正規表現書き方ドリル (WEB+DB PRESS plus)

反復学習ソフト付き 正規表現書き方ドリル (WEB+DB PRESS plus)

  • 同上

まとめ

一覧にしてみると、いろいろ読んでた。 内容をあまり覚えてない本とかも結構あって、今読み直すと印象変わったりするかなと思った (特にインフラ系の本)。

技術書を読む基準にしていた、知識の土台を作るというのはある程度成功したのかなと思ってる。 ネットで調べた内容が全くわからないみたいなことはだいぶ減った。

次の1年は、インプットは続けるけれど、もう少しアウトプットに比重を置こうと思う。 アウトプットする中で身につくこともきっといっぱいあるはず。

おまけ

ちなみに、去年のAdvent Calendarでも振り返ってた上、12/10を担当していた。 12/10は自分にとって、ふりかえる日らしい。 yinm.hatenadiary.jp

TogglのAPIを使って、ReportsをJSON形式で取得する

Project単位で今年のタスクを抜き出す方法を試したのでメモ。

API token

GitHub - toggl/toggl_api_docs: Documentation for the Toggl API に書かれている通り、 https://www.toggl.com/app/profile で確認できる。

取得コマンド

curl -v -u {自分のAPItoken}:api_token -X GET "https://toggl.com/reports/api/v2/summary?workspace_id={取得したいWorkspaceのid}&since=2017-01-01&until=2017-12-31&project_ids={取得したいProjectのid}&user_agent=api_test"

toggl_api_docs/summary.md at master · toggl/toggl_api_docs · GitHub をベースに、今回取得したいデータは 今年中特定のProject なので、以下のリクエストパラメータを加えている。

  • since,until: 期間を指定して、今年中にする
  • project_ids: Projectを指定

他のリクエストパラメータは、 toggl_api_docs/reports.md at master · toggl/toggl_api_docs · GitHub を参考にすればよさそう。 ちなみに、リクエストパラメータのvalueは、togglのページでそれっぽい値がありそうなページにアクセスして確認した。(もっといい方法あったりするのかな...?)

まとめ

基本的にはAPIドキュメントを読むだけだが、「API tokenどこにあるんだろう?」や「この値取りたいのだけど、リクエストパラメータはどれ?」となったので、備忘録として残しておく。 curlじゃなくて、クライアントライブラリ使ったり、自分でクライアントを書いたりすると勉強になってよさそうだなあと思ったので、時間見つけて書いてみよう。

参考

github.com

grepコマンドで、前後の行を取得する方法

ログを調査するときなどに、grepをよく使う。 ただ、grepで検索した文字列の前後の情報も欲しい時がある。 その場合は今までgrepした後に、別途lessで見直すなどしていた。 もっと便利なやり方あるんだろうなーと思ってたら、先輩エンジニアさんから教えてもらったのでメモ。

使うコマンド

# grepと一致した行と、その後のn行を表示する (after-contextの`A`)
grep -An

# grepと一致した行と、その前のn行を表示する (before-contextの`B`)
grep -Bn

# grepと一致した行と、その前後のn行を表示する (contextの`C`)
grep -Cn

temp.txt (検索対象のファイル)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

-Aオプション

$ grep -A5 10 temp.txt
10
11
12
13
14
15

-Bオプション

$ grep -B5 10 temp.txt
5
6
7
8
9
10

-Cオプション

$ grep -C5 10 temp.txt
5
6
7
8
9
10
11
12
13
14
15

参考

qiita.com

初めてのContribution

前のエントリで書いた、プロを目指す人のためのRuby入門(チェリー本)の誤植を修正するPRが無事にマージされた。 他の人のリポジトリにマージされたのが初めてだったので、一人で「やったー!」と喜んでた。

github.com

それと、GitHub.comのContributionsが、今日で3000を超えた。 もともとコミットの粒度を細かめにしてるのもあるけれど、Write Code Every Dayしている結果だなあと思ってる。 これからも積み重ねていこう。

f:id:yinm:20171121203918p:plain

今日のもくもく

今日は、Ruby(on Rails)の勉強をした。
今年の残りは、Ruby関連の勉強を重点的にやることになりそうかなーと思ってる。

Ruby

この本やってる (まだ発売されてないけれど、先行販売してる書店があったので購入)

gihyo.jp

今は2章の途中。
文字列や数値の扱いなど基本的な部分をやってる。
ただ、「なぜRubyでは、nilが偽になるのか」など、実装するときに役立つことも書かれてて面白い。

それと、読んでる途中で誤植かなと思うものを見つけたので、PRを送ってみた。
人のリポジトリにPRを送ったことがなかったので、どうやるんだろうなと思ったけれど、この記事がわかりやすかった。

GitHub のフォーク (fork) とプルリクエスト (pull request) の使い方 - akihiro kamijo

Rails

この本をやってる。

gihyo.jp

とりあえず、1 ~ 3章がRailsの基本ということで、ささっとやった。
今は、Modelの説明をしてくれている5章をやっている。
Active Recordが全然使いこなせない...と思うことが多いので、この章で練習したい。

ブログを書くこと

ひさしぶりにブログを書く。 以前に書いたのは179日前らしい。

もともと、文章でもっとアウトプット増やしていった方がいいんだろうなとは思っていた。
ただ、「こんなに時間かかったのに、全然書けなかった」と遅筆さに落ち込むことが多かった。
また、自分のレベルだともっとインプットに重視した方が、スキルアップに繋がると思っていた。
そのため、ブログ書かなくてもいいかーと思って放置した結果、この広告は、90日以上更新していないブログに表示しています。もばっちり表示されていた...!

でも、今日このツイート見て、ブログ書くことにした。

ぐさっときた。

考えてみれば、今まではブログ書く時は、他人の視点を気にしすぎてた気がする。
もちろん読み手を意識するのは大切だし、自分の書いたエントリが誰かの役に立てばとても良いことだと思う。

でも、ツイートを読んで、自分が今やっていることや思ってることが残せるだけでも充分じゃないかと思えた。
実際に、このエントリを書く前に過去のエントリを読んだら、当時の自分が考えてたことや、こんなこともわかってなかったのか〜とか発見があって面白かった。

誰かのためじゃなく、自分のためにゆるーく書いていこうと思ったので、これからはちょこちょこ書いていくことにする。

fishをインストールしてみた

「モダンなshellといえば、fishでしょう」という声をよく聞くようになったので、入れてみた。
ちなみに、普段はzshにいろいろ手を加えて使ってる。

やったこと

インストールから、よく使いそうな便利プラグインまで紹介されててわかりやすかった。 とりあえずこのサイトと、PATHさえ通しておけば、大体良さそうな感じがした。

PATHの通し方とかを確認した。説明がわかりやすい。

* fish shellでzの結果をpecoって爆速でディレクトリ移動する - ka2n's blog

ディレクトリ移動もpecoしたいので、zコマンドをpecoでフィルタリングできるようにした。

まとめ

手を加えないでも、使いやすい感じになるのですごいなあという印象。
特に大きな不満がなければ、このままzshから乗り換えようかな。