たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【エンジニアの生活】エンジニアならカンファレンスに参加しよう

   

ふだんはPHPerとして、企業でコードを書いています。で、ずっとひきこもってコードを書いていると、じぶんのスキルや知識というのが、いったい世間でどれほどのものなのかがわからなくなりませんか?そして、他社でも同じようなことをやっているのかも気になるところです。

そういうときには、カンファレンスに参加するのがおすすめです。

というわけで、今日はPHPカンファレンス関西2018に参加してきました。ざっくりまとめていこうとおもいます。

今回は以下の内容で、さっとまとめてみました。

・最新技術を知る
・LT(ライトニングトーク)がおもしろい
・知り合いがふえる(かも)
・転職したいならカンファレンス参加
・PHPカンファレンス2018レポ

最新技術を知る

現場のトレンドを垣間見ることができる機会はこういうカンファレンスならではです。

LT(ライトニングトーク)がおもしろい

LTとは制限時間5分程度で発表をするものです。時間が短いのでスピード感がある発表となり、インパクト勝負な内容になることが多く、ネタ要素も通常のカンファレンスと比較して多めなので、わりと笑いがあふれるものとなっているので、盛り上がっておもしろいです。

知り合いがふえる(かも)

カンファレンスのあとには懇親会があったり、また、カンファレンスを聴いたあとに発表者の発表スライドをツイートしたりすると、発表者本人からレスポンスがもらえてコミュニケーションが生まれたり、知り合いになるきっかけがわりとあったりします。

転職したいならカンファレンス参加

こういうカンファレンスが成立しているのは、参加者の参加費以外にスポンサーの存在がおおきかったりします。スポンサーブースが会場にはあって、そこで自社製品の紹介等の宣伝をしています。そして、自社製品の売り込み以外に、転職者を探している場合もあります。ですので、職探しの目的で企業見学をする意味合いでカンファレンス参加するのもアリです。

PHPカンファレンス2018レポ

今日見たカンファレンスのメモを載せておきます。
興味のあるひとはぜひ。基本的には、カンファレンスの発表スライドはネット上にアップされることがおおいので、もしもみられなかったカンファレンスがあった場合もあとからスライドを見ればOKです。なので、メモは「スライドにはない内容」「自分がとくに注目する内容」に限っておくのがカンファレンスを聴講するポイントです。タイムテーブル | PHP カンファレンス関西 2018 - PHPカンファレンス関西2018

あえてPHPerにすすめるVue.js

最近、フロントエンド界隈が盛り上がっていますが、その中でもvue.jsがおすすめですという内容。

  • 2018年3大フロント

Anguler.js
大規模開発むけでかっちりしている

React
中、小開発向け(twitterとかをウォッチしていると、Reactが盛り上がっている印象あり)

Vue.js
小規模~

Vue.jsのよさ

  • htmlライクにかける
  • lalavelがデフォでサポートしているのが、vue,ブートストラップ
  • サーバサイドの中にわりと難なく書き込める(部分導入可能)
  • デザイナとのやり取りがしやすい

vue.jsをライブコーディング

割とリアルタイムにうごく(すごい)
Reactは少しだけ書いたことがありますが、たしかに、Vue.jsのほうが直感的にかけてよさげだなと思いましたね。

まとめ
とりあえず、Vue.jsも書いてみようかなと。

スライド↓
あえてPHPerにすすめるVue.js

素早く実装するための戦略

速く開発できると
新機能の開発にアサインされやすい

速さを妨げるものは、わからなさ

分割統治法
大きな問題を小さく切り分けていく

分割統治法とは

表をイメージして裏からつくる

インターフェースを利用

争いのない部分からつくる
争いのない部分とは、どう転んでも変更がないであろう部分

そもそも、開発開始時点ですみからすみまで仕様がきまっているものはない。

なので、争いのない部分からつくる。

争いのある部分が終わってから、
争いのある部分をつくる。
その中でも、争いの少ない部分から作っていく。

実装は、頭のなかや、紙の上で考える。

部品をつくる

部品がそろったら、組み合わせて動かしてみる

大きな処理に小さな処理がぶらさがっている

さらに速度をあげるテクニック

  • よい道具をつかう
  • 壊れにくい道具
  • 間違いにくい道具
    あわてている時に対応してくれる道具
    エディタのコード補完
  • 手数が少ない道具
    人間系のミスをできるだけ排除する
    →CIとかphp indexer

  • 動きの早い道具
    CIのプランをあげる
    ゲーミングマウスをつかう

じつはゲーミングマウスは以前からすこし気になっていました。登壇者の菱田さんいわく、レスポンスの速度が普通のマウスよりもよいらしい。。

↑これでも買ってみようかなと

ちなみに、これもいいです。
さいきん購入したトラックボールマウスです。
全てのハードなPCユーザの疲労にうちかつための強い味方です。
操作性にも優れ、個人的には完全にPCのマウスポインタ操作に対する概念が変わりました。

トラックボールマウスの記事も今度書きます!

・じぶんの速度を上げる

決断を早く!

  • 悩む時間を設定する
    グーグルでは10分ルールらしい。
    菱田さんの場合は1時間まで悩めるルールをつくっている
    それでわからなければ、上司やスタックオーバーフローに聞く。悩む時間設定が重要。

  • 思考を速く
    手っ取り早いのは速聴。
    速聴で思考の速度が上がるらしい。

ということで、速聴をやってみることにしました。
何でやったらいいかですが、Youtubeにそういうコンテンツがあったので、そこからやってみることに。
YouTube
別にこういう速聴専用コンテンツでなくても、youtubeには再生速度を2倍まで調整できる機能があるので、それで好きなコンテンツを2倍速で聴いてみるといいかもしれませんね。やってみます。

  • ベンチタイムの有効活用
    CI(Continuous Integration 継続的インテグレーション)を回している間とかに、、
    作業を並列
    後工程のあるものから、実装していく
    スケジュールも表と裏を意識する

まとめ
速さをもっと意識しないとなあと思い返したのでした。

スライドはこちら
https://www.slideshare.net/77web/ss-105830976

続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜

今回のテーマ
コードの設計をみる第3の眼を養う

「著書:アジャイルソフトウェア開発の奥義」を参照

solidの原則はあたらしいものではないが、なぜ、これを学ぶのか?solidの原則は現在にも通用する技術であり、息の長い技術を身につけるとお得であるから。

バリエーションを捉え損ねている
→オープンクローズドの原則を違反している

オープン
→機能を拡張できる
クローズ
→修正を行わない

これらを同時に満たすのが、オープンクローズドの原則。

バリエーションを起因として、モジュールに新たな振る舞いを追加する際に、単に新しいコードを追加するだけで、目的を達成できる状態になっていること。

バリエーションから保護せよ!

・バリエーションで変化する部分はどこか?

OCPに準拠

バリエーションの軸に沿って、クラス化

フォーマッタークラスの準備

フォーマッタークラスをりようしたただけで、だいぶんわかりやすくなった。

新規クラスの追加で済む

修正に対して閉じている

しかし、
まだswitch文に対して閉じてない

レゾルバを用意。
レゾルバとは、仕組みに対して、マッピングする処理を行うもの。

OCPに準拠できた。

OCP
可拡張と修正不要を両立

バリエーションに沿った設計。
レゾルバの導入

それ以外の方法

New

ビジターパターンでのバリエーション対応。
ビジターパターンも結果として、OCPの原則に準拠した。

ダブルディスパッチ
ダブル・ディスパッチ~ 典型的なオブジェクト指向プログラミング・イディオム ~

レゾルバがクラスを呼ぶのに対して、
メソッドの呼び出しわけで、バリエーションに対応する。

条件分岐は、コード設計のタネとなる
→マーティンファウラーの本

とりあえず、アマゾンでぽちってみましたよっと。

switch文やif文が登場することが、即座にOCP違反というわけではない。あくまでメイン処理に対して、ocpに即しているかを判断するべき。
コードをかくには、じぶんの頭で考え、比較し、試行錯誤すること。

OCPの視点で見ると、よい設計が持つべき特徴が垣間見える。

コード設計を見る第三の眼。

まとめ
本日の個人的ベストセッションでした。オブジェクト指向プログラミングをしていく上で、だれもが知るべきであり、どうすればよいか悩んだことがある内容を、本質的に解説されていました。春に開催されたphperkaigiに参加したときに、後藤さんのこのオープンクローズドの原則の話を聞いたときにも、わかりやすくてすごいなあとおもっていたのですが、今回はその内容がさらに洗練されパワーアップしてたので、驚きました。

スライド↓
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜

フロントエンドエンジニアが伝えたい最近の事情

普段は社内ツールの作成
フロントエンドエンジニア
reactとかをごにょごにょ

いままではサーバサイドの片手間でかけていた。jqueryとか。
でも、最近はフロント系言語も覚えることが増えてきて、サーバーの片手間では書けなくなってきている。
(ReactとかReactとか)

Javascript(JS)には罠がいっぱい
ES2015のおかげで罠は減ってきた
constや
アロー関数を使う

flowtype fb製
type script ms製
を導入すると型を導入できる。

すると、不測のエラーを避けられる。

jsも進化してきている

spa pros
シングルページアプリケーション
高速。リクエストが発生しない。

spa cons
クローラーがjsを解釈しないと、ページが認識されない。

ssr
サーバーサイドレンダリング
初回アクセスだけ、サーバー側でレンダリングする。

bff
バックエンドフォーフロントエンド


疎結合になって責務を分離できる。

バックエンドとフロントエンドの協業

swaggerというツール

まとめ
世界的企業になろうとしているメルカリのフロントエンジニアさんのおはなし。個人的に2018年のフロントエンドはわりとReactが盛り上がっている印象がありました。そして、Reactとかは覚えると画期的なんだろうなあとおもいながら、ドットインストールとかでちょっと書いた程度だと、覚えることがけっこうあるなあと思い、まさに登壇者の大原さんの言ってたとおりの感触でした。

スライド↓
フロントエンドエンジニアが伝えたい最近の事情

HerokuでPHPアプリ開発速度を倍にする

セールスフォースのプロダクト
herokuは開発者のためのpaas

herokuで開発に必要

herokuをつかうこと自体はgitがあればすぐにできる。

herokuでphpを使うときには、
composerがいる。

CI CDがやりやすい
継続的xx

CD
継続的ディベロップメント
ギットハブからヘロクにデプロイできる。

Herokuは
インフラの代替ではなく、
インフラからの解放。

とりあえず、使ってみるといい。
きっとアプリケーションひとつくらいなら、一カ月実質無料で利用可能でしょう

まとめ
まえまえからつかってみたいとおもっていましたが、本セッションを聴いて、使ってみようとおもいました。

スライドはこちら(ちょっとまえのカンファレンス?のものしかみつからなかったので)
https://www.slideshare.net/DeveloperForceJapan/phpheroku-72971106

「ふつうのPHP」がpixivになるまで

pixivにはフレームワークは使ってない
開発当初にフレームを使ってなかったから。
(既存のフレームワークには依存してない。)
Lalavelに乗り換える予定もない。
このままいくつもり。

pixivの運用
サーバー35台
月間75億pv

2007年サービス開始。

2014年ジェンキンスでCI導入

アプリケーション構成
よくあるLAMPスタックに載ってる
cgi的構造をとっている
→seoとかの関係で変えない部分も。

それゆえphpStormでテストすると、
変な返答がある。

whoopsといあフレームワークをつかうと、かっこいいエラー画面になる。

具体的な話はwebDBPressの記事に。

クラスの命名規則は組織内で一貫していれば、ルールはない。

クエリーパラメータの処理がいる。

ParamHelperを使っている。

filter_input()等もよいが、手間かかかる。

→ようは、バリデーションがいる。

ReverceRoute

pdoの処理が面倒。
→PxvSql

pixivはphp7.1化される

質問

pixivは30人で開発。
10人でレビュー。

動的ではなく静的解析である理由は、同名メソッド等が多く、やりにくさがあるらしい。

まとめ
億オーダーのpvがあるシステムが、ノーフレームワークなのは意外でした。そして、サービス運営が目的である以上、運営的に損失が考えられることはせずに、たとえコードがレガシーであろうとも、そのままいくという姿勢は、ソフトウェアプログラムはあくまでもpixivというサービスのための手段であるということで、不意にコードやプログラムはあくまでも解決のための手段であるという本質にふれた感じがして、とても興味深かったです。

スライドはこちら
https://niconare.nicovideo.jp/watch/kn3225

LightingTalk

Bluetoothキーボードにアイフォンを繋いで、文字を打つライフハッカー発見。

テストを書いたことがないエンジニアがテストを書けるようになるまでやったこと at PHPカンファレンス関西2018

テストを書いてない

テストを書くように

テストをやる意義
本当に動くかの不安を解く。

迷ったら、テストを書く。

テストコードが仕様書になる。

スライド↓
テストを書いたことがないエンジニアがテストを書けるようになるまでやったこと at PHPカンファレンス関西2018

まとめ
最近テスト駆動開発をしたので、テストの重要性にはとても共感できました。

あとで見る
インターフェース再入門 / Think Interface again - Speaker Deck

しかしながらLalavelも勉強しないとなあと。。

現場からは以上です。

 - プログラミング系