エンジニアとしてこの先生きのこるために t_wada さんの講演を聞いてきた。 BIT VALLEY -INSIDE- Vol.10 #bvinside

エンジニアとしてこの先生きのこるために t_wada さんの講演を聞いてきました。

togetterスライド と併せて読んでいただくことで、当日に参加できなかった人もキャッチアップできると思います。

概要

渋谷界隈にオフィスを構える企業による合同勉強会のコミュニティ、BIT VALLEY -INSIDE-。
第10回は和田 卓人(@t_wada) さんの講演「エンジニアとしてこの先生きのこるために」

イベントページ : BIT VALLEY -INSIDE- Vol.10 : ATND

ハッシュタグ : #bvinside

togetter : #bvinside BIT VALLEY -INSIDE- Vol.10エンジニアとしてこの先生きのこるために - Togetter

形式: セミナー形式

講演内容について

年に何度かプログラマを目指している方向けにキャリアや勉強の話しをしていて、毎回ブラッシュアップしている内容。
スライドを見たことあるも人いるかも。

直近だと4月にリクルートテクノロジーズさんで講演したスライドがアップされています。

前後半の2部構成になっています。

前半 学び方を学ぶ

前半のベースとなる内容は以下の2冊

どちらの書籍も同じようなテーマで書かれています。 学び続けて知識をつけていきましょうと。

技術はどんどん入れ替わっていくので、学び続けないと競争力が落ちてしまう。 但し、年を取るほど可処分時間が少なくなるので、効率的に学ぶ必要がある

そのため「技術の学び方を学ぶ」必要がある

※ 達人プログラマー について補足

1. 四半期毎に技術書を読む

  • どこから読んでいけばよいのか問題
    • ある書籍を読んだら、その書籍が参照している書籍を読んでいく
    • 同じ著者で読んでいく
  • 時系列を意識して読む
    • 例えば、エリック・エヴァンスのドメイン駆動設計(原著)は2003年に発行
      • それ以降に出た考え方は含まれない
      • 古い本は引き算して読む必要がある
  • 長期記憶に定着させるように読む
    • 何度も出し入れする

2. 手を動かして学ぶ

  • まずやる(好きかどうか気にしない) -> できる -> 好きになる
    • むしろ好きじゃないほうが客観的に選択できて良い
  • デールの円錐
    • 学習の定着効率を意識する
  • 写経
    • 今日も写経をやってきた
    • 昔は本を開いてやってたけど、最近は電子書籍があるのでそれでも良い

3. 毎年少なくとも1つの言語を学習する

  • 仕事でメインで使うため、最初の数年はできる
    • 最近のシステムだと
      • JSから逃げられない
      • Pythonから逃げられない
      • SQLから逃げられない
  • 言語転職はジャンジャンやっちゃって良いと思っている
  • その後は、業務で使わないので難しくなる
    • 挫折しないために、だんだんにじり寄る(軸を1つだけずらす)
  • 仕事で使う以外の言語を学ぶことで良いことがある
    • 副作用が少ない言語を学ぶと、自分が普段書いている言語でも副作用が少ない書き方をするようになる
  • 他のやり方として、業界のトレンドをチェック
  • 英語からは逃げられない
    • 話せる必要はない
    • 書ける必要もそこまでない
    • 読める必要はある
      • 道具を使っても良い
    • 英語の情報に苦手意識なくアクセスできるだけで大分変わってくる

4. 身の回りをプログラミング対象にする

  • 言語を学んでも使わずに終わると身につかない
  • エゴイスティックなプログラミングでよい

5. アウトプットを行う

  • アプロプットはプライベート(友達、同僚)でもよい
  • 量は質に転化する
    • ろくろ教室の実験
      • 質の高いものがでたのは、量のみを評価したグループから
      • 質のみを評価したグループは
        • 構えてしまう
        • 時間かけてしまう
  • ツイッターは埋めれてしまうので、ストック型メディアがよい
    • ブログを書きましょう。Qiitaでもよい
      • 長文を書きましょう
  • クソエントリ問題に対する解決策
    • Jenkinsの作者 かわぐちさんの言葉
      • 情報発信、blog, 発表, 公開などは、数学の(未解決問題の)証明ではなく、料理のようなもの
        • 数学の証明は最初の一人目が偉い(総取り)、だけど料理は違う
    • 技術の情報発信は情報鮮度がついて回る
      • 第一人者が過去に発信した情報、と第三者が最近発信した情報だと、必ずしも第一人者の情報に価値があるわけではない
    • 環境をつくるだけでもそのまま動くものはない
      • エラーメッセージを省略せず全部貼り付けて、どういうところでつまずいて、どう考えてどう解決して動いたかまで書いていると、その情報は価値がある
  • 技術系同人誌の台頭により技術書の業界に光が指した
    • 技術系同人誌どんどん増えるとよい。書きましょう
  • LTも良い
    • 成功も失敗も許容できる心理的安全性が高い場所で発信する
  • ライブコーディングはハイリスクハイリターン
    • 失敗を許容する5分間のライブコーディングとかあったらよき

後半 現役プログラマでいるために

1. 毎日コードを書く

  • 今日からで良いので始めてください
  • 住む場所を工夫する
    • 始発駅の近くに住むと電車に座れる可能性をコントロールできる
      • 座れるとコードが書ける
  • 意図的にオフライン時間をつくる
    • 新幹線/飛行機のような締切がある時に作業が進む人が多い

2. 年下から学ぶ

  • 過剰適応とタコツボ化
    • 技術は定期的に淘汰される
      • 技術もアンラーニングが必要
      • 技術も分断投資しましょう
  • 使う道具を定期的に変える(エディタも)

    Emacs 20年でVScode にチャレンジするも戻ってしまっていた。
    VScodeを本気で使ってきた人とペアプロすることでVScodeの知見を得た
    ペアプロはアンラーニングのチャンス

3. 過去から未来を知る

  • 技術は振り子
    • 動的と静的、分散コンピューティングと集中コンピューティングなど
    • 実は振り子ではなく螺旋。徐々に進化している
      • 分散だと、EJB、マイクロサービス
    • 詳しくは技術選定の審美眼。を見て
  • T字型ではなく複数の柱を持ちましょう
    • 15年に1回くらいT字の柱が折れる
      • 離れたところに柱を立てる
        • フロントエンドだけじゃなくUNIXまわり触れておく。みたいに

4. 人のつくる渦を見る

5. 大事なことに集中する

  • 子供ができたりして諦めなきゃいけないことが、いろいろ出てくる
  • エッセンシャル思考が良かった

Laravel 5.7 の環境構築 for Mac

今回は Laravel 5.7 の環境構築を行います。
Homebrew を使用して PHP のインストールから実施していきます。
Laravel HomesteadLaravel Valet は使用しません。

環境情報

  • macOS Mojave (10.14)
  • Homebrew はインストール済み

Laravel 5.7 サーバ要件の確認

Laravel 公式ドキュメント より引用

PHP >= 7.1.3
OpenSSL PHP拡張
PDO PHP拡張 Mbstring PHP拡張
Tokenizer PHP拡張
XML PHP拡張
Ctype PHP Extension
JSON PHP Extension

実施手順

1. PHP のインストール(Homebrew から)

Homebrew でインストールします。

$ brew install php

サーバ要件を満たしていることをコマンドで確認していきます。
まずは、PHPのバージョンを確認します。

$ brew info php
php: stable 7.2.11 (bottled)

次に拡張モジュールの有無を確認します。

$ php -m | grep -e openssl -e ^PDO$ -e mbstring -e tokenizer -e ^xml$ -e ctype -e json
ctype
json
mbstring
openssl
PDO
tokenizer
xml

2. Composer のインストール(Homebrew から)

パッケージ管理ツール( Node.js でいうところの npm )である Composer をインストールします。

$ brew install composer

バージョンは 1.7.2 でした。

$ brew info composer
composer: stable 1.7.2

3. Laravel のインストール(Composer から)

Laravel をインストールする準備が整いましたので、インストールしていきます。

$ composer global require "laravel/installer"

laravel コマンドを使用可能にするために、パスを通します。

$ echo export PATH="\$HOME/.composer/vendor/bin:\$PATH" >> ~/.bash_profile

パスの設定を反映させるために source コマンドを実行します。
(ターミナル再起動でも反映されます。)

$ source ~/.bash_profile

インストールした Laravel のバージョンを確認します。
バージョンは 5.7.10 でした。

$ php artisan --version
Laravel Framework 5.7.10

4. Laravel のプロジェクトを作成する

プロジェクトを作成したいディレクトリに移動します。
(/path/to/projectディレクトリ名に置き換えてください。)

$ cd /path/to/project

プロジェクトを作成します。
(今回は公式と同じくプロジェクト名を blog とします)

$ laravel new blog

5. Laravel のプロジェクトを起動する

作成したプロジェクトのディレクトリに移動します。

$ cd blog

PHP のビルトインサーバーを起動します。

$ php artisan serve
Laravel development server started: <http://127.0.0.1:8000>

ブラウザから下記URLにアクセスし、Laravel の画面が表示されていれば起動成功です。
http://localhost:8000

こちらのURLでも良いです。
http://127.0.0.1:8000

f:id:noratora:20181025135045p:plain

6. Laravel のプロジェクトを停止する

サーバーを停止する場合はコンソール上で ctrl+c で停止します。

以上です。

絶対に挫折させないアプリ開発 はじめてのLaravel 第5章で気をつけること

技術書典5でゲットしたこちらの本

絶対に挫折させないアプリ開発 はじめてのLaravel

「第5章 はじめての PHP 開発 〜TODO アプリを作ろう〜」にて
フレームワークなしのPHPでTODOリストを作るところまで進めました。
その際、動作確認時に環境まわりで躓いたので気をつけることをメモします。

環境情報

  • macOS Mojave (10.14)
  • Homebrew はインストール済み

実施手順

mysql は Homebrew でインストールしました。

$ brew install mysql

MySQLのバージョンは8.0でした。

$ brew info mysql
mysql: stable 8.0.12 (bottled)

あとは手順通りに進めて、ソースコードを写経していき
最後に動作確認のためにビルトインサーバーを起動し、
ブラウザにてアクセスしたところ

$ php -S localhost:8000

下記のエラーメッセージが画面に表示されました。

データベースに接続できません!アプリの設定を確認してください。

app.php のcatchブロックの中に調査用のコードを追記し確認すると

} catch (PDOException $e) {
  echo 'データベースに接続できません!アプリの設定を確認してください。';
  echo $e; // 原因調査のために追記
  exit;
}

下記のエラーが発生していることがわかりました。

The server requested authentication method unknown to the client [caching_sha2_password]

こちらのエラーは MySQL 8.0.4 からデフォルトの認証プラグインが変更になったことによって発生したようです。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin

下記の2つの対応により解決しました。

対応1. デフォルト認証プラグインを変更する

/usr/local/etc/my.cnf に下記の設定を追記しました。

# デフォルト認証プラグイン
default_authentication_plugin=mysql_native_password

対応2. MySQL の root ユーザーのパスワードを再設定する。

$ mysql -u root

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

$ SELECT user, host, plugin FROM mysql.user;

$ exit

対応後、再度ビルトインサーバーを起動しブラウザにてアクセスすると

$ php -S localhost:8000

無事に画面が表示されました。

f:id:noratora:20181023225738p:plain

N予備校 プログラミング入門 Webアプリ コース を修了しました

勉強会でお会いした方から「N予備校 プログラミングコース」の存在を教えていただいたのがきっかけで、始めてから約2ヶ月が経ちました。
ちょうど「【2018年度】プログラミング入門 Webアプリ コース」が修了したのでこの時点で感想を残したいと思います。

N予備校 プログラミングコース とは

ニコニコ動画でお馴染みのドワンゴが運営するeラーニング(オンライン学習)サービスです。
類似サービスでいうとドットインストールProgateなどがあります。

N予備校の独自性としては2点

  • プログラミングコース以外にも、大学受験コース、中学復習講座などの学習コースがあり、それら全部含めてN予備校というサービスである点
  • 使用する教材がN高等学校という通信制高校で実際に使用されている点

例えば、流行りの機械学習を学ぶにあたって数学をやり直す。 英語のドキュメントをなるべくGoogle翻訳なしで読めるように英語をやり直すということも、N予備校の中で完結します。

また現役高校生が理解できるようにということで、教材がの作りが丁寧です。(Google Chrome のインストールをするところから始めています。)

Webアプリ コースの内容について

Webアプリ コースはプログラミング未経験者を対象とし、
Google Chrome のインストールから始めて、
最終的に「調整さん」クローンをHerokuで公開するまでをゴールとしています。

Herokuに公開したものがこちら→ 予定調整くん
(ログインにGitHubアカウントが必要です)

上記アプリケーションのソースコードはこちら→ GitHub

カリキュラムで扱う内容は以下の通りです。

第1章 はじめよう

第2章 準備使用

第3章 サーバーサイドプログラミング入門

  • Node.js
  • Hubot
  • テンプレートエンジン(Pug)
  • Heroku
  • Basic 認証
  • Cookie
  • Bootstrap
  • 脆弱性対策

第4章 実践サーバーサイドプログラミング

Webアプリ コースの感想

私はプログラミング経験者ですが、Node.jsは触ったことがなかったので、
学び直しの気持ちで「プログラミング入門 Webアプリ」コースから始めました。

感想としては、このコースのカリキュラムを一通りこなしたら、
幅広いスキルが身につくだろうと思いました。

理由は、未経験者や経験が浅い方ははシステム開発の特定部分しか担当しないことが多く、
それよりも、小規模でも良いので全体(要件から公開まで)を経験したほうがスキルが伸びるからです。

無料で体験できるコースもあるので、プログラミング未経験者の方はとりあえず試してみることをオススメします。

JBUG (東京#5) - Backlog API もくもく会 - に参加しました。

1. はじめに

人生で初めての社外勉強会に参加しました。

勉強会の始めに「アウトプットするまでが勉強会」と仰っていたので
それに乗っかってブログにアウトプットしたいと思います。

勉強会に参加したいけど迷っているという方に、雰囲気が伝わるように書き残しておきたいと思います。

2. 参加したきっかけ

もともと社外勉強会に参加したいという気持ちは持っていたのですが、
ハードルが高く感じて躊躇していました。

今回、時間、場所、題材、会の形式がビビビッとマッチしたので、
いまがチャンスという思いで、エイヤッと申しみました。

3. 勉強会の内容

こちらの勉強会に参加してきました。

Backlogというプロジェクト管理ツールのAPIを利用して何か作りましょう。
もしくは作っていたモノを発表しましょうという、いわゆる「もくもく会」でした。

(※BacklogGitも使えるフリープランもあるので 個人プロジェクトで利用することも可能です。)

当日の内容に関してはtogetterにまとめられていますので、そちらをご覧ください。

【東京】#JBUG 5回目 - Backlog API もくもく会 - @東京 - Togetter

4. 勉強会の雰囲気

当日は、開始時間の15分位前に会場入りしました。
すでに何人かの参加者の方々がおり、各々で交流をされていました。

人生で初の社外勉強会ということもあり緊張していましたが、
会場に入った直後から主催者の方がフレンドリーに話しかけてくださったり、
もくもくし始める前ににアイスブレイク的な感じで自己紹介タイムを設けてくださったりと、
打ち解けやすい雰囲気づくりをされているなと感じました。

テーブル毎に数人で固まってもくもく会を行っていましたが、
各テーブルには有識者の方が座っており、技術的なアドバイスもいただけました。

また、勉強会と言えば写真が付き物ですが、
写真を撮り始める前に写真NGの方が居ないか聞いてくださったので、
諸事情により写真NGの方でも安心でした。

5. 成果物

参加申し込みをした直後から前日まで事前に自宅でもくもくしており、ほぼ完成していました。
ソースコードgithubにて共有しております。
https://github.com/noratora/backlog-member-management

6. 懇親会

勉強会の終盤くらいに運営の方が出欠を取ってくださり、約半数の方が懇親会に参加していました。
勉強会の最中はお話する機会がなかった方と交流できましたので個人的には参加することをオススメします。

7. 名刺交換、SNS申請

他の参加者の方と名刺交換をすることがありましたので、用意しておくと良いです。
会社の名刺を出すのに抵抗がある方はSNSアカウントで繋がるのでも良いと思います。

私は今回は会社の名刺を持っていきましたが、
次回からは勉強会用の名刺を作ってSNSアカウントを載せておきたいなと思いました。

8. 最後に、勉強会に参加するのを迷っている方へ

参加する前に心配していたことはだいたい杞憂に終わります。

今回、私は発表はしませんでしたが単純に参加するだけでも得られるものがありました。

慣れたかどうかで言うと、1回しか経験していないので正直微妙ですが、 2回、3回と回数を重ねていけば慣れていけそうだと思いましたので今後も参加していきたいと思います。

どうせ失うものは何もないのでエイヤッと申し込みましょう(笑)

Play Framework 2.6 の環境構築 for Mac

Homebrew を再インストールしたことで、
いろいろと開発環境がリセットされたので、
今回は Play Framework の開発環境を構築します。

環境情報

注意事項

Homebrew を利用できることは利用していくスタイルなので、
Playの公式サイトに載っている情報とは手順が異なる場合あります。

実施手順

1. sbt のインストール(Homebrew から)

sbt というビルドツールをインストールします。
Homebrew からインストールします。

$ brew install sbt

2. インストールしたsbtのバージョンを確認(Homebrew から)

$ brew info sbt
sbt: stable 1.1.0

今回インストールされたバージョンは 1.1.0 でした。

3. プロジェクトを作成する(Javaの場合)

Java用のテンプレートプロジェクトを作成します。

$ sbt new playframework/play-java-seed.g8

プロジェクトが作成されたら、起動します。

$ cd play-java-seed

$ sbt run

初回実行時はダウンロード処理が行われ、
起動まで結構な時間が掛かりました。

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

こんな感じのメッセージが表示されていれば、
サーバーが起動完了しています。

http://localhost:9000/

にアクセスして「Welcome to Play!」と画面に表示されればOKです。
ちなみに、サーバー停止は「Ctrl + D」 できます。

4. プロジェクトを作成する(Scalaの場合)

Scalaの場合もJavaとほぼ同様です。

$ sbt new playframework/play-scala-seed.g8
$ cd play-scala-seed

$ sbt run

同じように http://localhost:9000/ にアクセスして
「Welcome to Play!」と画面に表示されれば完了です。

Homebrewの再インストール

macのOS High Sierra に上げた影響なのか、 Homebrew の brew コマンドがうまく動作しなくなりました。

エラーメッセージから事例を探し、いくつかのコマンドを打ち込んでみたが解決しないので、伝家の宝刀を抜くことにします。 そう「再インストール」を実行します。

環境情報

実行手順

まずは、Homebrewをアンインストールします。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

次に、Homebrewを再度インストールします。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew doctor (1回目)

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Your Xcode (9.0) is outdated.
Please update to Xcode 9.2 (or delete it).
Xcode can be updated from the App Store.


Warning: Your XQuartz (2.7.5) is outdated.
Please install XQuartz 2.7.11 (or delete the current version).
XQuartz can be updated using Homebrew-Cask by running
  brew cask reinstall xquartz

Xcode が古いよ。というエラーがでたので、 最新版を Mac App Store から入手します。 (サイズが5GB位あるため、ダウンロードに時間が掛かります。)

XQuartz も古いよ。ということなので、 最新版を入手し、インストールします。 https://www.xquartz.org/

You will need to log out and log back in to make XQuartz your default X11 server.

ログアウト->ログインしなさいとのことなので、指示に従います。

brew doctor (2回目)

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  php55

brew link でリンクを貼ります。

$ brew link php55
Linking /usr/local/Cellar/php55/5.5.12... 0 symlinks created

brew doctor (3回目)

$ brew doctor
Your system is ready to brew.

追記(2017/2/6)
よく調べたら High Sierra からPHPのバージョンが7.1になっているので、
php55 は不要でした。アンインストールしました。

$ brew uninstall php55

以上。