わくわく技術ブログ

プログラミング・統計・機械学習

手を動かしてみて学ぶ (日経ソフトウェアの特集記事を通して)

事の発端

先日、日経ソフトウェアの2016年11月号を買ってきました。

主な目的としては、付録のWPFについての冊子。なかなか情報無いのでね。前に連載してたのは知っていたけど、日経ソフトウェアはあまり買わないので。
(Software Design, WEB-DB Press, 日経ソフトウェア の順に買う頻度が減る感じかな。どれも興味のある刊しか買ってない。)

ただ、特集1の後半、PHPのLaravelなるフレームワークを使った開発例が載っててちょっぴり興味を覚えました。 というのも、Webの話題(特にセキュリティまわり)では何かとPHPに触れられるのに、自分自身はPHPを全く触れたことがなかったため。
加えて、Laravelというフレームワークは聞いたことが無かったというのもあり。(自分が知らなかっただけで、かなり有名らしいですね。)

そんなわけで、普段は流し読みだけのところ、実際にコードを打ち込みながら勉強してみました。
そんな時のあれこれのメモというか日記。

(特集記事も商品なので、極力ソースコードが出てこないようにしてます。読みにくいですがあしからず。)

作業

Ubuntuのバージョンは最新ではないのかとか、やや疑問に思いつつ、基本的に記事に従う形で進めることに。

なんか遅いしエラーでたけど...??

Composer(PHPのライブラリ管理ツール、これも今回知った)で、Laravelを使うアプリのプロジェクトを作成。

composer create-project (略)

と打つ。
待つ。
待つ。
……なにか間違ったかな(・_・)?

そう、妙に遅い。

そして、やっと動いたと思ったら、次のようなメッセージが。

Failed to decode response: zlib_decode(): data error

…? デグレードしてやり直して今度は成功しました的なメッセージも出たけど、なんのことやら。
そんなエラーに関して、当然ながら特集記事には書いてない。

こういう記事もあるので、みんな経験しているのだろうか。
Composerが超遅い件

またエラーだけど? @git

記事では、開発フローの体験ということでgitを使って(形だけだが)コードを管理している。
というわけで、記事に書いてある通りのタイミングで、書いてある通りにgit commitしようとする。

…あれ?またエラーでた。

これはgitを知っていたのですぐに気づいた。
git addしていないのだ。

この記事を書いた人は、実際にはコマンドを打っていないのだなと認識した。
そんなものなのだろう。

サーバーにアクセスできない @環境準備での失敗

gitにcommitもしたし、まずはサーバーにアクセス。
ブラウザにURLを打ち込みEnterを押す!

…アクセスできない。

これはすぐには理由が分からず。

結論としては、PHPのビルトインWebサーバーでは、デフォルトではlocalhost指定でないと動かないということ。 自身のIPアドレスを指定するのと、localhost指定するのと、127.0.0.1指定するのと同値だと思っていたよ…(´・ω・`)これは自分の勉強不足。

気づくのに遅れた理由の一つが、環境が記事とちょっと違ったこと。
記事ではBash on Windowsを薦めていたのだが、なんとなく嫌だったのでVirtualBoxUbuntuを用意することに。
(それでも良いと書いてあったし。)

ただ、今思えば、おそらく記事で意図していたのはDesktop用のUbuntuUbuntu内のブラウザから、localhost指定でアクセスする前提だったのかと。

自分はUbuntu Serverを用意してSSHでアクセスしてて、VirtualBoxのNAT機能でアクセスしようとしていたので。 ちょっとした(自分にとっての)はまりポイントでした。

正直、これがPHPの用意している機能なのかLaravelの用意している機能なのかも分からないまま検索することに。
こちらも先人のおかげで解決しました。
Laravelのartisanでサーバを立ち上げた時にプライベートIPでアクセスできない問題と、その対処法 - Front-end beginner's luck

Postできない…?

やっとアクセスできるようになったものの、 まだすぐには記事通りに進まず。

POSTしようとすると、MethodNotAllowedHttpExceptionが投げられる。
なぜ。

理由はなんてことなく、以下2点。 - HTML上で<form method="POST"&gtとしなければならないところを、&ltform mehtod="POST"&gtとミスタイプしていた。 - IlluminateをIllumminateとミスタイプしていた。

特に1点目、この場合、GETでリクエストが飛ぶんですね。
POSTに対する処理は書いていたけど、GETに対する処理を書いていなかったから、エラーになっていたと。

PHP初めてだしLaraval+Bladeとかいうのも初めてだし、単純なことにもなかなか気づかず。
試しにGETで書いてみたり、最終的にはFiddlerで飛んでるリクエストを覗いたりして解決に。

IDEとか使わず、カスタマイズを何もしていないvim(そもそもvimを普段使わない)で書いたのが敗因でした。

思ったこと

雑誌の特集記事とか、だいたい眺めて終わりにしているんですが、
意外とハマりポイントあるんですね。

IDE使えば解決できることだったり、 元記事の誤植だったり、 いやそんなもの初めから気づけよ的な話だったりするかもしれませんが、 本題とは別のところでもハマりポイント=学びポイントはありますね。

手を動かせとはよく言う話ですが、たしかに必要だなと思いました。
(実際には時間との兼ね合いなんですけどね。)

その他

artisanの読み方がわからず