PHP BLT #2 で LT してきた話

もう先週の出来事になってしまったが、メルカリオフィス@六本木ヒルズで PHP BLT の第 2 回が開催された。

LT 枠で応募して、無事に滑りこむことが出来た。20 枠もあればすんなり入れるだろうと思ってたが、思いの外応募が多くて BLT ブランドすごいなと思った。

メルカリオフィスにつくと、だだっ広いスペースの一角が会場として準備されていた。メルカリは絶賛増床中だそうで、勢いを感じた。
PHP7 リリース直後ということもあり、PHP7 ネタは大いにかぶる可能性があったのであえてそのネタは外して、SensioLabs が出してる Security Checker の話をした。

この checker は以前話題になっていた「ぼくの考えた最強の開発フロー PHP編」の中でちらっと紹介されていたもので、その後この checker についても伸びるかなーと思っていたが、案外日本語の記事が全然現れてこないので、発表することにした。

スライドを読んでいただければ全て書いてあるが、自分のプロジェクトで使用しているライブラリの脆弱性チェックをしてくれるというツールで、それを CI に組み込んでしまえば、普段意識せずに開発できて良い感じですよというもの。

注意点としては、絶対の信頼をおいちゃダメだよってことで、JVN など一次ソースをあたることも忘れちゃならない。

スライド中で、Lumen に組み込んだ CI のサンプル用リポジトリへのリンクをはっていますが、面倒な方はこちらからどうぞ。

https://github.com/serima/security-checker-on-lumen

 

個人的には、packagist.jp の方が来ていたのがテンション上がった。いつもお世話になっていたので…、そしてメルカリに入社していたことにびっくり。タレント揃えてる感あるなーと。

イベントまとめとしてはここがとても良くまとまっているので興味ある方は是非。

PHP BLT #2 に参加してきました

余談ですが、@uzulla さんがトップバッターの LT ってその後のハードル上がるからやめてほしい…

個人的な次のミッション

12月末から1月頭にかけては順調にスタートを切れたので、今後もこの流れを継続するために目標を立てておく。

  • PHP7 CasualTalk の資料作成
    • WordPress のベンチマーク
  • Laravel brancher 検討
    • 実装方法検討
  • ウェブサービス作る
    • 企画は頭のなかにあるので極力シンプルに実装始める

CentOS 7 上の nginx で SSL 化 & HTTP/2 対応

冬休み中、SSL 化とそれにあわせて HTTP/2 対応だけやり残しました。
なので、空いた時間を使ってサクッと終わらせました。

Let’s Encrypt を使えば無料で SSL 証明書を取得できます。良い時代です。
以下のページを参考にさせていただき、手順通りにやれば問題無いです。

Let’s Encryptを使って簡単0円でサーバ証明書を取得

で、http/2 対応している nginx のバージョンは 1.9.5 以降のようなのですが、ソースからビルドするのはやりたくないなーということで yum からいけないかと調べた所ドンピシャな記事がヒット。

yumでnginx 1.9.5にアップデートしてHTTP/2に対応

この通りにやったら、今日時点では、Version 1.9.9 になりました。

で、nginx の設定ファイルの listen 443 ssl; となっている部分を listen 443 http2; に変更し、ssl_ciphers の先頭に AESGCM:HIGH を追加し、nginx を restart させれば完了。

serimacohttp2

無事に HTTP/2 対応できました。
正味、1 時間ぐらいで全部できるので暇な時に是非どうぞ!

CentOS 7 に PHP 7.0, nginx, MariaDB を Ansible でインストールする

前回の投稿でこの休み中にやることを決めました。

今日で冬休みも終わるので、成果をここで公開します。

  • 4年ぐらい前に借りたさくら VPS をずっと使っていた
    • CentOS 5, PHP 5.5, Apache, WordPress 3.9 というもはやレガシーな環境になってしまっていた
  • VPS を借り直すだけで同じ料金で VPS のスペック自体が 2 倍になる

というわけで、新規で VPS を構築しつつ Ansible で初期セットアップの自動化と、各種ミドルウェアのセットアップも自動化しました。

  • CentOS 7
  • PHP 7.0
  • nginx 1.8
  • MariaDB 5.5

初期セットアップについては、この記事が大いに参考になりました。とても助かりました。

Ansible でさくらのVPS の環境構築を自動化 ~ハマりポイントとともに~

初期セットアップでやっていることは、作業用ユーザ作成、SSH ポート変更、root でのパスワードログイン禁止、firewall の設定あたり。細かいことは上の記事を読んだほうが絶対に良いので、そちらにお任せ。

特筆すべきは、CentOS 7 になって iptables というより firewalld を使ったほうがよさげだったので、playbook でもその点は playbook にも反映しておきました。
firewalld は iptables のラッパー的な存在のようです。

さくら VPS のコントロールパネルからカスタム OS で CentOS 7 を選んで、minimal インストールを選択、root パスワードだけインストール中の画面で設定しておきます。

ミドルウェアインストールの playbook については、PHP 7 をやっぱり入れたかったのであえていうならそこくらい。
remi-php70 が既に公開されており、日々更新されているので、こちらを使いました。

New “remi-php70” repository

あと、Wordpress で ftp の代わりに ssh2 を使いたくなったんですが、現状、ソースからインストールしないと使えないらしいので、ssh2 は諦めました。

Solution : How to install ssh2 php7 extension.

(playbook 中で、sed を使いまくってるけど lineinfile に置き換えたい…けどまぁそこは今度)

WordPress 4.4 を使っていますが、今のところ問題なく PHP 7 で動作しています。
ベンチマークをとりたかったんですが、VPS 自体のスペックもかなり上がってしまったので、純粋に PHP の性能測定はできないかなと思い今回はやっていません、が体感早くなった気がするのでおすすめです。

ちなみに、どちらも playbook を github で公開しました。
細かいところはまだ全然出来てないですが、「完璧を目指すよりまず終わらせろ」とザッカーバーグ先生が言っていたのでこれで良しとします。

serima/centos7-initalize-ansible
serima/centos7-php70-nginx-mariadb-ansible

1日2〜3時間ほど作業時間を捻出してくれた妻に感謝!

冬休み中にやりたいこと

すでに仕事納めも終わっているので、あとはなんとかして空き時間を確保して以下をやりたい。

  • プライベートなサーバを、CentOS 7 にアップグレード
    • おそらく OS インストールから各種ミドルウェアセットアップも行うことになるので、Ansible 使ってみる
  • WordPress を PHP 7 で動作させる
  • nginx に移行
  • Let’s Encrypt で SSL/TLS 対応

(以下、余力があれば)

  • HTTP/2 対応
  • ローカルから簡単にデプロイできる仕組みを作る
  • Public repo な自分の project の CI 整備

出産タイミングでの転職について

これは、子育てプログラマ・ITエンジニア・Webデザイナー Advent Calendar 2015 の 23 日目の記事です。

今年の 10 月に第一子が産まれ、11 月に転職しました。

一般的には生活上の大きな変化を2つ以上重ねないほうがいいといわれますが、
このタイミングの転職は大丈夫なのか、実際にしてみてどうだったかという点を書きたいと思います。

実は、転職活動自体は 5 月ぐらいからゆっくりと始めており、出産前に良い所が見つかればなーと思ってました。

幸い、妻のつわりはとても軽く、妊娠前とほぼ変わらない生活を送ることが出来ました。

10 月に子どもが産まれる旨は面接の前から再三伝えるように心がけ、そこを考慮してもらえるような職場でなければ、やっぱり厳しいと思いながら転職活動はしていました。

しかし、条件面含め、もろもろ考慮した上でしっくりくるところが見つからず 7 月が終わってしまいました。

そろそろ見つからないと時期的にも出産と被ってしまうし、いったんステイかなーと思っていた矢先、偶然今の職場を知る機会がありました。

家庭の状況も考慮してもらえる(僕がさんざん言ったからかもしれませんがw)、職務内容も自分のやりたいことにマッチしており、運良く内定をいただくことが出来たのが 8 月下旬。

産前 1 ヶ月と産後 1 ヶ月半ぐらいは妻は実家に帰省する予定だったので、その間は一人暮らしとなります。
そのタイミングを入社時期と被せてしまえば新しい会社に慣れるまでの期間、家族に負担を強いることもないので、むしろそっちのほうが都合がいいことに気付きました。

さらに、有給が 1 ヶ月分ぐらい残っていたので、有給消化中は妻の実家で産前産後直後は一緒に過ごすこともできるし、このタイミングでの転職は結果的にベストじゃないかなと思いました。

今の職場は、その日の家族の体調次第でリモートワークに切り替えることもできますし、子持ちのエンジニアの方が割と多いので理解も得やすい環境なので、転職して良かったなと思っています。

確かに転職先やタイミングを間違えると、本人にとっても家族にとっても辛い時間を過ごすことになってしまいそうですが、エンジニアならではのリモートワークな環境を慌ただしくなる出産前に手に入れておくことはその後の生活が大きく違ってくるかもしれません。

子どもと一緒に妻が帰ってきてからは確かにプライベートな時間は本当になくなりました。
なにか新しい技術をちょっと休日に触ってみるなんてこともできなくなってしまっている状況なので、この AdventCalendar を書いてる先輩方の記事を大いに参考にして、時間を作っていきたいと思います。

今、妻は買い物に出掛けているので子どもはこんな感じで膝の上に乗せながらこの記事を書いていますw
足がしびれてきたので体勢を変えたいが、変えたら起きてしまう…そんな葛藤の毎日です。Evernote-Camera-Roll-20151223-123901

 

Mac の Chrome で、キーボードのフォーカスをページに戻したい

Mac の Chrome では、Cmd + l で、アドレスバーにフォーカスされるようになっていますが、逆の動作はしないようになっています。つまり、フォーカスをページに戻したくても、Cmd + l 押しても戻らない。
ページをクリックすればもちろん戻るけど、当然ながら、キーボードだけで完結させたいじゃないですか。
特に vimium とか入れてれば尚更。vimmer としては、Esc 押下すればページにフォーカスされるのが一番自然なんですが、それは API のコントロール外にあるらしく変更できないらしい。

で、みんなどうしているのか…とググッてみたところ出てきましたよ。やっぱり悩んでる人はいるらしい。

http://superuser.com/questions/324266/google-chrome-mac-set-keyboard-focus-from-address-bar-back-to-page

簡単に言うと、アドレスバーに「javascript:」って打ってエンター押すと、ページにフォーカス戻るよ。この機能を使って、検索エンジン追加して、「u」を入力してエンターしたら「javascript:」って打ったことにできるよということですね。

なんという hack。これぞ hack って感じですね。

やり方は以下。

1. chrome://settings 開く
2. 検索 の「検索エンジンの管理」開く
3. こんな感じのを追加
chromesearchengine

4. アドレスバーに u と打つとこんなふうに出てきてくれるので、すかさず enter

chromesearchengine2これで、完了です。u じゃなくて、なんでもいいと思いますが、とりあえず僕も前例に倣っておきました。

Google に bug report っていうか issue は出してるみたいだけど長らく放置されてるのかな(よく読んでない)

「良い戦略、悪い戦略」読後メモ。

久々にビビッと来るビジネス本に出会えたので、すこしばかり引用を。

それは「われわれの基本戦略は、顧客中心の仲介サービスを提供することである」というものである。「仲介サービス」というのはなかなか響きの良い言葉だが、要は金を預かって貸し出すということで、銀行の本業にほかならない。「顧客中心」は最近の大流行の言葉で、サービス業なら改めて言うまでもないことである。ひょっとすると、より良いサービスを提供して顧客拡大をめざすという意味かもしれないが、そうだとしてもどこでもやっていることで、これだけで差異化が図れるとは思えない。要するに「顧客中心の仲介サービス」はまったく中身のない言葉である。この銀行の戦略から厚化粧をはがせば、「われわれの基本戦略は銀行であることである」となってしまう。

痛快。顧客中心ってバズワードになっているが(今はもう落ち着いたかな?)、よくよく考えたら顧客中心じゃないビジネスっていったい何なんだという話。
ただ、いままで顧客中心なビジネスをしていなかった業界に斬りこむ場合もあるので、そういうときに差異化になるのかな。

がんばることは人生において大事ではあるが、「最後のひとふんばり」をひたすら要求するだけのリーダーは能がない。リーダーの仕事は、効果的にがんばれるような状況を作り出すことであり、努力する価値のある戦略を立てることである。

その通り、という感じ。

分権化が進んだ企業の場合、新製品が投入されると、製品群の位置づけや棲み分けは曖昧になりやすい。

権限委譲のデメリットのひとつ。意識しないとなー。

シャーロック・ホームズがワトソンによく言うように、「見ているだけではだめだ、観察しなければいけない」。

これはかっこいいなと思ってメモった。

目先のことや最初の思いつきに迷わされずに自分の考えを導くためには、三つの習慣をつけるとよい。第一は、近視眼的な見方を断ち切り、広い視野を持つための手段を持つこと。たとえばリストは良い方法である。第二は、自分の判断に疑義を提出する習慣をつけること。自分からの攻撃に耐えられないような論拠は、現実の競争に直面したらあっさり崩壊してしまうだろう。第三は、重要な判断を下したら記録に残す習慣をつけることである。そうすれば、事後評価をして反省材料として活用できる。

第三が特に気になった。失敗を推奨する会社はこのところ多いけども、きちんと振り返りを行わないと会社としてのノウハウとして積み上がっていかない。

最近読んだ本リスト

このところ、割と時間があったのでいろいろと本を読んだ。以下の本を読んだのですが、この周辺に興味ある人とディスカッションしたい。

  • 「納品」をなくせばうまくいく
  • ワーキングカップルの人生戦略
  • ザッポス伝説
  • トヨタ生産方式
  • 入門 組織開発
  • チームの力
  • ALLIANCE
  • スーパーエンジニアへの道
  • ライト、ついてますか
  • 良い戦略、悪い戦略
  • WORK RULES!
  • 弁護士ドットコム 困っている人を救う僕たちの挑戦
  • メンバーの才能を開花させる技法

しばらくしたらまたブログ書きます。

Laravel のログインパッケージ Confide のパスワードリセット通知メールをテキストメールとして送信する

仕事で関わっているプロジェクトで Laravel のログインパッケージ Confide を使用しているのですが、パスワードリセット操作をした際にユーザに送信されるメールは、デフォルトだと Content-Type: text/html で送信されてしまいます。
これだとなにがまずいかというと、ユーザが @softbank.ne.jp などのキャリアメールを使用している場合に本文が添付ファイルとして送信されてしまいます。
さらに、charset が UTF-8 に設定されているため文字化けしていて読めないメールが届いてしまいます。

そこで、パスワードリセットの通知メールなんて、Content-Type: text/html で送るほどでもないので、text/plain に変えたいなーと思いました。

最初は、メール送信をしているメソッド ConfideUser#forgotPassword をオーバーライドしないとダメかなーと思っていたのですが、コードをよくよく読んでいくと config 変更するだけでいけそうということでやってみました。

結局、Confide も Swift Mailer を使ってメールを送信しているだけなので、渡す view の中身に気をつけてやればよしなにやってくれるということでした。

関係しそうなコードはこのへん。

https://github.com/Zizaco/confide/blob/master/src/Confide/EloquentPasswordService.php#L176
https://github.com/illuminate/mail/blob/master/Mailer.php#L328-L330

というかんじでした。
もちろん、text/html メールを送りたければ key の名前を html にすれば良いと思います。

なお、Confide の導入については @localdisk さんのLaravel のログインパッケージ Confideの解説(実践編)がとても親切です。

忘備録も兼ねてのポストでした。