楽しいだけで十分です

好きなことを書きます

2017年4月9日

やったこと

所感

今日は割とガシガシとコード書いてた。

パーフェクトPHPは、前章で作った自作フレームワークで、Twitter風のアプリを作る話。
自作したフレームワークでアプリを作るというのは、やっぱり勉強になるなあと思った。
ただ、前章では、ひたすらフレームワークを作るだけで、動作確認しなかったので、エラーが出まくった。今は一応直ったはず・・・。

JUnitの方は、昨日の続きやってた。
ただ、JUnit固有っぽいなと思う話が増えてきた感じがするので、このままやっていく意味があるのかなと思い始めた。
そこで、PHPUnitを使って、本に書いてることをやっていくのは意外とありなのでは!?と思い、PHPUnit入れてみた。
なので、明日からは、PHPUnitを使って、本を読んでみることにする。
これもダメそうだったら、また考えよう・・・。

2017年4月8日

筆不精なので、ゆるくその日の出来事でも書くということを目標にしたので、書く。 うーん、なんかブログを書くことに、モチベーションが起きるような何かがあればいいのだろうなー。

やったこと

所感

最近テスト力をつけたいなーとずっと思っていて、Javaはほとんど書けないのにJUnitを書いている。
2章, 3章は、概念的な話が中心だったが、4フェーズテストなど、「ユニットテストでやることって、詰まるところこんな感じ」という話がされていて勉強になった。

Webを支える技術の方は、会社の勉強会に使う資料の作成をした。
CSSをいじれたら、もうちょっといい感じにできるのだろうけど、今のCSS力では無理だった。今後の課題。

HTTPステータスコード 302, 303, 307を整理する

会社で同期と話してる時に、「HTTPステータスコードの302, 303, 307って使い分けがよくわからないよねー」ってなったのですが、たまたまパーフェクトPHPで出てきたので、まとめておきます。

それぞれの定義

  • 302: Found
  • 303: See Other
  • 307: Temporary Redirect

どの定義もユースケースとしては、「一時的に別のURLを見て欲しい場合」に使用する

詳細な違い

  • 302, 307は定義上は同じもので、リダイレクト時に使用したものと同じHTTPメソッドでリダイレクトする
  • 303は、POSTリクエストでデータを送信した後に、表示用画面へGETでリダイレクトして欲しい場合に利用する

ここまでは、仕様の話なのですが、それを無視した挙動が存在するので、話がややこしいのです・・・

ややこしいところ

ほとんどのブラウザは302でも、303と同じようにGETでリダイレクトする (ほとんどのブラウザは、本来の302の仕様を無視している)

実際に、多くのフレームワーク (Ruby on Railsなど)でも、リダイレクトのデフォルトが302になってますよね

なんでこんなことになったの?

歴史的経緯によるものらしいです。

ざっとした、経緯の箇条書き

  • HTTP/1.0には、302 Temporary Redirectしか定義されていなかった
    • 303 See Other, 307 Temporary Redirectは、HTTP/1.1で策定された
  • HTTP/1.1では、「302はリダイレクト時にリクエストされたメソッドを変更してはならず、303はGETでリダイレクトを行う」という仕様にするつもりだったが、多くのブラウザが302を正しく実装せず、303的な挙動をするようにしていた
  • そこで、HTTP/1.1が改定された際に、本来の302の役割を、307 Temporary Redirectとして定義し、302は302 Foundと改定された

まとめ

とりあえず、一時的なリダイレクトを行うときは、302を使っておけば大丈夫みたいです。

なんで同じような定義がいっぱいあるんだろうなあと思ってたのですが、歴史を辿るとなるほどーという感じですね。

参考

gihyo.jp

パーフェクトPHPの「6章 Webアプリケーション入門」をPDOで書き直した

PHP7.0.14でパーフェクトPHPを写経しているのですが、mysql関数が廃止されているため、そのまま写経しても動かない (!) という状態になってしまいました。
なので、自分でPDOで書き直してみました。
同じようなことしてる人がいたら、参考までにどうぞ:)
(自分の環境では動いていそうですが、動作を保証するものではないので、あしからず。)

github.com

ターミナルで、shell-init: error retrieving current directory: getcwd: cannot access parent directories: というエラーが出た場合の対処

コマンドが実行できない!となって焦ったエラーですが、原因は大したことないものでした。

原因

カレントディレクトリが存在しないため、発生しているエラーです。

解決方法

存在していることがわかっている、別のディレクトリに移動すれば解決します。

参考

SSHログインで「shell-init: error retrieving current directory」となるのを調べたら意外に時間がかかったという話 - \ay diary

Carbonで、日付をゼロサプレスする

PHPでCarbonを使って、日付を制御しようと思ったのですが、ゼロサプレスの方法が分からなかったのでメモ。

そもそもCarbonって?

PHPの日付操作のライブラリです。
Laravelなどのフレームワークにも取り込まれています。
carbon.nesbot.com

使い方はこの辺が参考になります。
PHPの便利な日時操作ライブラリCarbonで曜日を日本語で表示する | A Small, Good Thing – blog

本題

結論から言うと、ゼロサプレスしたいフォーマットの前に - をつけるだけです。 e.g. 本日の月日をゼロサプレスしたい場合

Carbon::now()->formatLocalized('%-m月%-d日');

簡単ですね。
sprintfなどの書式をわかっている人なら当たり前なんだろうなあと思いながら、僕は知りませんでした。
ネットでも調べた感じなさそうだったので、同じ轍を踏む人がいないように書いておきます。

社内で勉強会を開きました - その後

以前に書いた通り、先週から勉強会を開いています。 yinm.hatenadiary.jp

今日は第2回目ということで、前回の反省点を踏まえて、改善してみました。
実際に行ったことをメモしておきます。

まとめノートを作る

前回は、1項を読むごとにホワイトボードにまとめを書くという形で行ったのですが、進みが遅いことや、読む範囲の粒度が小さいため内容がまとめにくいといった指摘がありました。
ということで、今回はあらかじめ僕の方でまとめノートを作ってみました。節単位です。
github.com

勉強会では、節単位で読み手を交換して、読み終わるたびに、このまとめノートを僕が説明する形にしてみました。
スピードも上がったし、概ね良さそうでした。
とりあえず、次回も同じ形で進めていこうと思います。
唯一問題は、このノートを作る時間とモチベーションを、保てるかなー?というところでしょうか・・・!

勉強会・読書会に関する記事などを読んだ

世の中ではたくさんの勉強会が開かれているわけなので、そこから何か学べないかなと思って、いくらか記事を読んでみました。
いいなあと思った記事は次のものです。「勉強会って何だろうね?」という根本的な部分を考えられて良かったです。

勉強会を半年運営して気づいた「強烈なリーダーシップで引っ張るのではなく、“場を創って提供する”リーダーシップもある」って気付かされた話-Six Apart ブログ|オウンドメディア運営者のための実践的情報とコミュニティ

まとめ

試行錯誤しながら、のらりくらりやっていきます。いい勉強会にできたらいいな。