人生100年!生涯エンジニア人生!

楽しいエンジニア人生!

平成最後、思い出のフレームワークを語ろう!!PHPerKaigi アンカンファレンスレポート #PHPerKaigi

まとめ

  1. CakePHP、Laravel、FuelPHPSymfonyZend Frameworkなど著名なフレームワークが一切語られなかった
  2. 設計を熱く語った
  3. 物凄く濃い話ができて楽しかったです
  4. 雑なアンカンファレンスで申し訳ないです、参加してくれてありがとうございました!

語ったこと

CodeIgniter

  • 参加者の過半数は、バージョン2のライセンス問題の時代に、このフレームワークを経験する
  • バージョン1のことが語られる
    • 魔改造して使ってたことが語られる
    • ページーネイションがPOSTで行われてたことに衝撃をうける

Kohana

  • CodeIgniter難民が使ってた
  • 仕事では使ってない
  • ドキュメントは英語だけど、コントリビューターがロシア圏らしく、メンテナンスされにくい問題

Yii

  • 意外と人気
  • 弁護士.com やレアジョブも使っている
  • 2015年ぐらいにトレンドランキンで1位をとったことがある

Silex

  • 養成本がSilexで書かれているが、コントリビューターがSymphonyにいってしまった・・・

Slim

  • PSR準拠だから使いやすい
  • ちょっとした物をつくるときに使う
  • Silexが先輩

BEAR.Saturday & BEAR.Sundy

  • エキサイトで13年以上落ちなかった
  • 設計を強く語られました(雑にまとめて申し訳ないです)
  • 設計をちゃんとしていれば、ブレイクダウンしない
  • グローバルの設定するな

Phalcon

  • コンパイルされているのでデバックしにくい
  • PHP7で速度改善して、pharのメリットが薄れた
  • 非同期I/O対応してない

Mojavi

オレオレフレームワーク

  • 新規プロジェクトのみCakePHP2でやるため、オレオレフレームワークの属人化が激しい
  • オレオレフレームワークのメンテナーにお伺いを立てないと、改修とテストができない

PHP4

  • PHP4のバイナリーもう無いよね?→CDに焼いているから大丈夫

フレームワークの流行り廃り

  • 人気のフレームワークが出ると、若い人はそちらに行く
  • 若い人が来ないと廃り始める
  • コントリビューターも離れていく

PHPの新元号対応について #phpstudy #phperkaigi

f:id:hideaki_kawahara:20190329102410p:plain

概要

第136回 PHP勉強会@東京で話した内容「PHPの新元号対応について」をブログに書き起こします。 phpstudy.doorkeeper.jp 登壇資料は、こちらです。

なお、こちらはPHPerKaigi 2019(本編2日目3/31(日)13:30-14:30/Track C)にて登壇します。 phperkaigi.jp

元号について

※「㋿」←こちらは新元号になる予定の文字フォントです、㍻31年3月29日の時点では表示されません。

  1. 元号の発表は㍻31年4月1日(月)です、なお公表時間は決まってません午前11時30分に発表されます。
  2. ㋿元年5月1日(水)の「天皇の即位の日」に新元号に変わります。
  3. Windows 10、Mac OSX、iOSAndroid OSなど、元号を表示するOSは、新元号発表後にアップデート配布で対応されます。
    • 和暦表示対応
    • 合字フォント対応
  4. UNIX系ではLinux系の一部が和暦に対応しているのでアップデートが必要です、(BSD系は非対応、Mac OSXもBSD系)確認方法はこちらです。
    LC_TIME=ja_JP.utf8 date +'%EY'

dateとDateTime::format()クラスの対応

  1. 和暦に対応していないので、対応は不要です、PHPのバージョンアップも不要です。
  2. 独自実装なら、エポックミリ秒「1546300800000」を判定に使ってください。

strftimeの対応

  1. こちらはC言語のライブラリーから表示をしているだけなので、対応は不要です、PHPのバージョンアップも不要です。
  2. 和暦に対応したLinuxのみ対応が必要、Linuxのアップデートが必要です、確認方法はこちらです、対応が必要なOSなら平成31年と表示されます。
setlocale(LC_TIME, "ja_JP.utf8", "Japanese_Japan.932");
print strftime('%EC%Ey年');

Normalizerの対応

  1. 対応が必要です。
  2. 元号発表後、PHPなどのアップデートがあれば、PHP5系はPHP自体の差し替え、PHP7系はPECL intlとintl(国際化用拡張)モジュールの差し替えが必要です。
  3. CakePHP3はintlモジュールが必須なので、元号を使ってなくても更新するのが望ましいと思われます。
  4. 確認方法はこちらです、㍻ではなく平成と表示されるはずです。
    print normalizer_normalize("㍻", Normalizer::FORM_KC);

合字の対応

  1. ソースコードUTF-8で記載されている場合は対応は不要です。
  2. ソースコードUTF-8以外で記載されている場合は、ソースコードUTF-8へ変換する対応が必要です。
    • 理由は新元号の合字への追加はUNICODEEBCDICのみで、Shift-JISとEUC-JPは割り当てが無いからです。
    • Web表示しているなら、出力エンコードの変更も必要です。
    • ソースコードだけじゃなく、設定ファイルや読み込むファイルなども念の為に変換することが望ましいです。

まとめ

  1. アップデートが必要
    • Linux
    • PHP5
    • PHP7系PECL intl
    • intlモジュール
  2. ソースコードの改修が必要

エンジニアの登壇を応援する会 admins強化合宿 in 日光 に参加してきた #engineers_lt

目的

エンジニアの登壇を応援する会」の運営スタッフ(adminsと呼んでいます)で強化合宿を開催しました。

趣旨

  • 場所
  • 合宿内容
    • adminsの交流をはかる
      • 普段はSlack上で交流をし、その上で勉強会の準備・実施・振り返り会までの段取りを行っておりますが、合宿を通じて更なる交流をはかる
    • 他のadminsの思いを知る
      • 各自5分間の「自己紹介LT大会」で行いました
    • 自分たちが見つけたペルソナの成長支援する施策をアウトプットする
      • 「ワークショップ」を3部構成で行いました
        • 自分たちが見つけたペルソナ作成(2時間)
        • そのペルソナに対しての成長支援の施策作成(3時間)
        • 施作発表及び総括(2時間)

adminsの交流をはかる

別記事にまとめます。

他のadminsの思いを知る

admins自己紹介LT大会

以下の内容で1人5分間でLTを行いました。

  • 自己紹介
  • このコミュニティでなにをやりたいのか

自分のLT

勉強会へスタッフ参加はしているのですが、それ以外は積極的には参加しているのか?疑問に思いっていました、そのため自分の考えを棚卸しをして、このコミュニティが目指すMVVと自分のMVVに乖離は無いのか?そういう思いで自分のスライドを作成しました、

感想

admins9人の思いが知れてよかった。
その思いは各々違うけど、コミュニティに結集し、みんなの力を出し合って、コミュニティに返していく、そんな軸を持っていると思いました。

自分たちが見つけたペルソナの成長支援する施策をアウトプットする

私は、ねむさんと、ざきさんと同じチームになりました。
別名「カオスチーム」です、3人とも酒飲みで話は合うはずだけど、それ以外の共通点が少ないので色々な意味でも楽しみなチームと思いながらワークショップを開始しました。

ペルソナ設計のワークショップ(2時間)

自己紹介

まずはチームビルディングとして自己紹介からはじめました。
ねむさんは、一言でいうと組織の中でもアクティブに行動し、必要とあらば組織の枠を超えて交渉を行う人です
会社まで設立するフットワークの軽さも凄いです。

ざきさんは、自分を変えていこうとするエネルギーが凄いです、adminsで支援できるのか?という疑問には、自分が成長してコミュニティもみんなも成長したいというエネルギーを感じました。

ペルソナ設計

ペルソナを作るため、会の公式アカウントから事前アンケートをとりました。
アンケートにご協力いただき感謝いたします。
その結果から、カオスチームの気になるキーワードをピックアップすると、昨今話題の多いSIerに関するキーワードが多く抽出できました、今のSIerの現状を色濃く反映したペルソナができたと思います。
年代など基本項目は、このような感じで設計しました。

項目 内容
ペルソナ名 やまざきさん
年齢 30代
職種 客先常駐SE
エンジニア歴 5〜10年
立場 エンジニアリーダー
アウトプット ブログを不定期に書いている

これだけを見ると、やまざきさんには問題はあるように思えませんが、深掘りすればするほど、やまざきさんの悩みが見えてきました、それは「キャリアパス」です。
それをまとめたのは以下の通りになります。

esa-pages.io

ここから見えることは、自分はこんなに努力しているのに会社は評価しない、リーダー業務に追われて自分のやりたいことがやれない、開発をやりたいのかマネージャーをやりたいのか、自己スキルの棚卸しもできない、しかし時間が無駄に過ぎていくのに我慢できないので棚卸しの代替として勉強会で情報をインプットする日々です。

これは過去の自分です、キャリアパスに悩んでいる状態です、これについて、ねむさんは共感してくれました、ざきさんは設定したペルソナより若い世代なので強い共感はありませんでしたが、ざきさんは転職活動をしているので、キャリアパスに悩んでいる状態はとても共感していたようです。

As is / To be / 解決策のワークショップ(3時間)

ペルソナ設計が終わったら、ペルソナのAs is(現状)とTo be(理想像)の差を埋める解決策を考えます、ペルソナ設計するときに、As isは多く出しているので、もう少し深掘りする感じです。
自分はこんなに努力しているのに会社は評価しないを深掘りすると多くの問題と、ペルソナであるやまざきさんの問題も見えてきます、それを別の項目にして深掘りします。
深掘りをすると、会社の問題よりもやまざきさんの問題が露見します、この問題は自己解決できることであり本人次第で変えることが可能とわかります。
やまざきさん井の中の蛙であり自信が無い状態であり、社外に知り合いが居なく登壇経験が無いので社外でアウトプットすることが怖いと考えているとなります、自信が無ければ自己解決をするための一歩を踏み出せない、この悪循環に陥っていることがやまざきさんがまず解決しなければならないことです。

esa-pages.io

解決案はやまざきさんが自信を持てるようにするのと、キャリアプランの相談をできるメンターを用意することになります。
それが「仲間作り&キャリア相談&MVV決定するイベント企画」という解決案です。

この3つの目標を解決することが、この企画になります。

esa-pages.io

総括のワークショップ(2時間)

この解決案はやまざきさんに関することも解決していきますが、副産物としてメンター育成の要素も持っています、メンターについては深掘りはしていないのですが、現状としてメンター不足な可能性があります、そのためやまざきさんのような方が生まれてしまいます、その環境を、今現在メンターで活躍している人、今後メンターを希望するエンジニアが結集し、1人でも多くの人がキャリアパスを見つけられることを強く求めます。

このような企画を定期的に開催することは、エンジニアの価値を再発見することができ、各々のエンジニアがMVVを作ることにより自己のやりたいことと能力を結集し明文化することができます。

まとめ

この会では自分は最年長になりますが、エンジニアの成長に関しては方法は違うにしろ、年齢関係なく常に考えていることを再認識できた良い合宿でした、今回のワークショップで出た課題はリアルな課題だと認識し、今後のエンジニアの成長のために改善し続けたいと思います。
今回、一緒に合宿をしたadminsとのざっくばらんな話もできたし、楽しい観光もできました、その模様は、またの機会にまとめさせていただきます。
最後になりますが、合宿のスポンサーとなっていただいたメルカリ様、本当にありがとうございました!

netlifyでホスティングしたときに5分悩んだこと

概要

片手間でやっている作業です。
さくらインターネットから、静的サイトはnetlifyに移転させようとしました。
その時、大したことじゃ無いけど、一瞬悩んだので記録しておきます。
デプロイ方法は、ここでは説明しません!ググってね。 www.netlify.com

悩んだこと

悩んだことはnetlifyでjQueryが動かなかったんですよ
自分は、すぐに気付きました、意外と見落としがちだと思いました。
解決するために以下のことをしました。

  1. 元の動いているサイトを確認する。
  2. jQueryが動くことを確認する。
  3. 関連ファイルがあることを確認する。
  4. jQueryの指定はCDNなので存在を確認する。

ここで気付きます。

原因

元のサイトはhttpサイトだったのでjQueryCDN先はhttpでした
netlifyではhttpsになるので、そのまま移行するとミックスコンテンツとなりjQueryが読めなかった
jQueryCDN先をhttpsに変更してGitHubにpushして自動的に反映させる。
無事にnetlifyでjQueryが動きました

まとめ

ミックスコンテンツには気を付けろ!

.devドメインを取得したので、サクッとFirebaseでホスティング

Firebaseでホスティングしなくても絶対やって!!

Google domainsのデフォルト設定ではDNSSECが無効です、以下のように有効にしてください。
マイドメイン、購入ドメインDNSで、DNSSECを有効にしてください。
f:id:hideaki_kawahara:20190303112556p:plain
DNSSECが無料で使えるGoogle domainsでDNSSECを有効にしないのは損ですよ!!

概要

Google domainsを使って .devドメインを取得した方は多いと思います。
domains.google
そして取得しただけで何もしていない方も多いと思います。
それなら、Firebaseを使って簡単にホスティングしちゃえばいいと思います。
firebase.google.com

Firebaseの準備

上記サイトから、右上の「コンソールへ移動」を押下します、色々とでますが、Firebase へようこその画面になりましたら、「プロジェクトを追加」を押下します。
プロジェクト名は適当につけて、日本リージョンを選択して「プロジェクトを作成」を押下する。
f:id:hideaki_kawahara:20190303001229p:plain
プロジェクトが作成されたら、左のメニューから「Hosting」を押下し「使ってみる」を押下します。
f:id:hideaki_kawahara:20190303002055p:plain
デプロイ方法が出るので、適当に「次へ」を押下して進めます。
f:id:hideaki_kawahara:20190303002313p:plain

Firebaseでデプロイ

ローカルマシンにNode.jsの環境があれば、ターミナルなどを立ち上げて $ npm install -g firebase-tools でツールを入れます。
そしてFirebaseの環境を作ります、まずはターミナルでログインします。

$ firebase login

? Allow Firebase to collect anonymous CLI usage and error reporting information?と聞かれるのでYを選択します。
Webで認証するので、該当のアカウントを選択して許可をします。
ログインが終わったら、プロジェクトを追加で追加したプロジェクト名でディレクトリーを作成し、Firebase環境を初期化します。

$ mkdir sugoi-dev
$ cd sugoi-dev/ 
$ firebase init

Firebaseの初期化メッセージが表示されます、あとは画面の指示に従って進めていきます。
◯ Hosting: Configure and deploy Firebase Hosting sitesをスペースで選択してエンターを押下します。
[don't setup a default project]を選択してエンターを押下します。
? What do you want to use as your public directory? (public) こちらはそのままエンターを押下します。
? Configure as a single-page app (rewrite all urls to /index.html)? (y/N) こちらもそのままエンターを押下します。
作成されたら、public/index.html を適当なのに書き換えます。

$ echo  "sugoi.dev" > public/index.html 

あとはデプロイだけです。

$ firebase deploy --project sugoi-dev

FirebaseとGoogle domainsを紐付ける

ここから、Firebaeの画面とGoogle domainsの画面を行き来します。

Firebaeの画面

Firebaeの画面に戻り、右上の「ドメインを接続」を押下します。
f:id:hideaki_kawahara:20190303012053p:plain
取得した.devドメインを入力します。
f:id:hideaki_kawahara:20190303012207p:plain
ドメインの所有権確認画面がでますので、コードをコピーしておきます。
f:id:hideaki_kawahara:20190303012337p:plain

Google domainsの画面

Google domainsの画面を開きマインドメインから、DNSを選択し一番下の「カスタム リソース レコード」に先ほどのコードを入力し、タイプは「TXT」を選び、TTLは「1M」を入れ「追加」を押下します。
f:id:hideaki_kawahara:20190303012627p:plain

Firebaeの画面

DNS反映に1分ぐらい待ってから、Firebaeの画面に戻り、「確認」を押下します、うまくいくとクイックセットアップ画面が出るので、そこに表示されているIPアドレスは後で使います。
f:id:hideaki_kawahara:20190303013615p:plain

Google domainsの画面

Google domainsの「カスタム リソース レコード」画面に戻り、タイプは「A」を選び、先ほどのIPアドレスを入力する。
ここで注意!2個分のIPアドレスを入力するとき「追加」ボタンの前に「+」があるので、+を押して2行分の入力欄にしてからIPアドレスを入力してから「追加」を押下します。

Firebaeの画面

Firebaeの画面に戻り、画面を更新すると、ステータスが「保留中?」になります、ここからかなり待ちます、気長に待ちましょう。
f:id:hideaki_kawahara:20190303014754p:plain

2時間ぐら待つと、ステータスが「接続されています」変わります、これで完了です。
f:id:hideaki_kawahara:20190303091841p:plain

料金

Firebaeの料金ですが、取り置き程度ならSparkプランで大丈夫なので0円で済みます。
f:id:hideaki_kawahara:20190303111438p:plain
つまり、ドメインの1年間の料金1,512円(税込)だけで済みます。

SSL/TLS OK

出来上がったサイトを確認すると、きちんとSSL/TLSサイトとして動いております。
Let's Encrypt で発行され、この更新もFirebaseが勝手にやってくれます、楽ですよね。
f:id:hideaki_kawahara:20190303111913p:plain
余談ですが、Google Chromeにおいて.devのサイトはデフォルトでSSL/TLSでつなぎにいこうとします、SSL/TLSの発行までやらないと無意味ですので、ご承知ください。