『Laravelリファレンス』を読んでみましたの。 #laravel

IMG_3517

こんにちは。エンジニアの吉田でございます。座右の銘は、そう、“シャチクスピリッツ”。

さて、この度、アルカナの深澤(@hico00)がアイスタイルの竹澤さん(@ex_takezawa)から『Laravelリファレンス』を献本頂いたとのことで、@hico00から「ブログを書いておいてください」という無機質なメッセージが記述されたポストイット(EngineYard製)とともに私のデスクにしれっとその本が置いてありましたので、何かしらの無言のプレッシャーというものを感じてこの記事の執筆に向かっている次第でございます。

昭和生まれを絶大にDisってくる平成生まれってこわいなぁという思いを馳せつつも、本題に入ってまいりたく存じます。

 

改めまして、献本くださり誠にありがとうございます。この場を借りてお礼申し上げます。

今回のブログで取り上げる書籍は下記リンクから購入できますので、ご興味が沸いた際にはこちらよりポチってするとよいかもしれません。

■『Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク』
 http://www.amazon.co.jp/dp/4844339451

ちなみに、このブログを書いている2016/1/26現在、ちょうど「Laravelリファレンス出版記念イベント」というイベントが開催されているようでございました。

■Laravelリファレンス出版記念イベント
 http://istyle.connpass.com/event/25223/

ということで、書籍の感想をつらつらと述べてまいりますが、前提としてどの程度の知識があると読みやすいだろうかという観点で綴ってみたいと思います。

 

おそらく対象となる読者層

『Laravelリファレンス』の書籍内には想定する読者層については言及されていなかったのですが、私の所感では初級者としてのフェーズが終わって、これから中級者への階段を上っていくようなフェーズにいるエンジニアの方が読むと良さそうなのかなという印象です。

例えば、CakePHPやSymfonyやZendFrameworkなど、何かしらのフレームワークを利用した経験があって、これから他のフレームワークを学習してみたい方だったり、RoRなどPHP以外のプログラミング言語の開発ではそれなりに一人前のプログラムがかけてPHPも構文程度なら知ってるけど、最近のPHPフレームワークだとどんな感じなのかを把握したい方だったり、そんな感じの読者だとすんなり内容が頭に入ってくるのかなと思いました。

フレームワークを使った経験の無い人にとっては難易度が高いと思うので、この本に入る前に初心者向けのフレームワークの書籍をワンクッション挟んでからの方が良いと思います。

サーバーやインフラ環境の話については(意図的に)深く言及されていないものの、Vagrantをベースに最低限必要となる開発環境の構築手順が掲載されていたり、PHPライブラリのパッケージマネージャであるComposerについての説明もなされているので、これまでVagrantやComposerを使ったことはないけど名前は聞いたことがあるかもという方には最適な内容になっているのではないかと思います。

MVCの基本的な概念や、O/Rマッパー、テンプレートエンジン、データベース、SQL、トランザクション、オブジェクト指向、クロージャ、ネームスペース、DIコンテナ、といったような単語を聞いてイメージできるレベルが望ましい印象です。

人によって個人差はあるので一概には言えませんが、経験年数でいうと3~5年くらいやってる方でしょうか。

ということで、目次に沿って個人的な感想をつらつらと述べてまいりたいと思います。誤りなどあれば@yossy222までマサカリを飛ばして頂けると幸せの絶頂です。

 

Chap.01 Laravelの概要

≪Laravelの概要≫では、Laravelの思想だったり考え方であったり特徴であったりといった説明から、VagrantBoxを使って実際に使い始めるまでの具体的な手順であったり、Laravelをインストールするために
必要となるComposerやオートローディングの仕組みについて説明されており、この章を読むことでLaravelを使った開発作業に取り掛かるまでの準備を整えることができます。

環境についての言及は、Homesteadと呼ばれるVagrantの開発環境までを範囲としているので、案件などで本番環境を構築する場合は、これとは別にインフラやサーバーの知識が必要になってくると思います。

 

Chap.02 Laravelの基本

≪Laravelの基本≫では、Laravelのインストールや初期設定について説明があり、Laravelに付属するArtisanというコマンドラインツールについて説明があります。

この章を読むことで、プロジェクトの雛型の作成方法や、ビュー、コントローラ、ルーティング、フォーム、バリデーションといった、よくあるWebアプリケーション開発で必要な最低限の機能について理解することができると思います。

ただ、他のフレームワークなどで概念を理解した上で読み進めた方がスムーズかなという所感です。

 

Chap.03 データベース

≪データベース≫の章では、Laravelからデータベースへ接続するために必要な設定や仕組みであったり、データベースのテーブルのスキーマを管理するためのマイグレーションと呼ばれる仕組みについて説明があります。

データベースのテーブル構造や、インデックスで、トランザクションといった内容を取り扱っているため、リレーショナルデータベースについての知識が必要です。

また、EloquentとよばれるO/Rマッパーについての説明もありますので、オブジェクト指向とリレーショナルデータベースについての理解や、インピーダンスミスマッチといった単語を知っているくらいのレベルが望ましいかもしれません。

1:1、1:N、N:Nといったリレーションについての説明もあるため、正規化(第3正規形程度)までの知識があると理解が進みやすいと思います。

 

Chap.04 フレームワークの機能

≪フレームワークの機能≫では、Laravelが提供してくれる機能について説明されています。

例えば、Webアプリケーションを開発する際には、要件として「ログイン」や「メール送信」などの機能が頻繁に求められます。

幸い、Laravelにはそういった機能を実現するためのコンポーネントが用意されているので、この章を読むことで、ログイン/ユーザー認証機能や、Memcached/Redisなどのキャッシュ、エラーハンドリング機構、ログ出力、多言語対応、メール送信、ページネーション、セッション、といった要件を実現するための手段を理解することができます。

こういった機能はよく要件として求められるものの、実装すると意外と時間がかかったりすることもあるので、フレームワークのレベルで提供されていることは開発効率があがるので嬉しいですよね。

Laravel以外のフレームワークでこういった機能を実装した経験のある方であれば、スムーズに読み進められると思います。

 

Chap.05 フレームワークの拡張

≪フレームワークの拡張≫では、LaravelのDIコンテナについての仕組みについての説明に始まり、Laravelの内部的な仕組みを理解した上で、フレームワークを拡張するという内容のため、中級者~上級者レベルの知識が必要かと思います。

DIを実現するための、コンストラクタインジェクション、メソッドインジェクションといった単語を聞いてイメージできる方であればスムーズに読み進められるかと思います。

他にも、サービスプロバイダ、コントラクト、ファサードといった概念についての説明と活用方法がかかれているため、Laravelに用意されている機構を使ったうえで独自の拡張機能を追加したい場合などはこの章を読むと良さそうです。

この本の中では、この章がおそらく一番難しい内容なんじゃないか思います。

 

Chap.06 テスト

≪テスト≫の章では、おもにユニットテストとファンクショナルテストについて説明がされています。

受託案件の開発においての工程では、単体テスト、結合テスト、総合テスト、運用テスト、受入テストなど、様々なスタイルのテスト工程がありますが、ユニットテストは主に単体テスト工程で、ファンクショナルテストは結合テストの工程で使用するイメージです。

PHPUnitによるユニットテストの記述の仕方やカバレッジ出力の仕方であったり、Mockeyというライブラリを利用したモックの使い方が説明されています。

また、ダミーのデータを生成するためのライブラリである Faker を利用したテスト用データの生成方法であったり、データベースを利用したテスト、ユニットテストを実行しやすくするためのリファクタリングの具体例も記載されています。

ユニットテストはクラス単位でのテストを実行するものに対して、ファンクショナルテストはコントローラに対してのテストを実行するものですが、このファンクショナルテストの解説もこの章に含まれています。

ユニットテスト、モック、ファンクショナルテストといった単語を聞いてイメージができる方であればスムーズに読み進められると思います。

 

Chap.07 実践的なアプリケーション構築

≪実践的なアプリケーション構築≫では、主にセキュリティ対策とコマンドライン実行についての解説です。

Laravelを使用した際に、XSS対策、SQLインジェクション対策、CSRF対策をどう実装するかが具体的に記述されていて、また、定期的にバッチ処理を実行したい場合にコマンドラインから利用する方法についても具体的に説明されています。

他にも、IDEのコード補完ツール、OAuthライブラリ、画像処理ライブラリなど、現場で必要とされうる補助的な内容も紹介されています。

この章は、実際にWebアプリケーション開発の経験がある方であればスムーズに読み進められると思います。

 

Chap.08 Laravelの実践

≪Laravelの実践≫では、簡単なブログアプリケーションの開発を実践します。

ユーザ登録、ログイン、ブログ管理、ブログ表示、コメント投稿、といった一連の機能をもつアプリケーションを実際に開発することで、Laravelを使ったWebアプリケーション開発技能を習得することができます。

Laravelのおまかな仕組みは知っているからいきなり実践じゃ!というスタンスの人は、この章の実践を進めながらわからない点があれば章を戻って深く理解する、という進め方もアリかもしれませんね。

 

さいごに

Laravelの利点として開発のしやすさが良く挙げられますが、PSRなどの標準だったり、PHP界のセオリーに従っていたりという観点もあるため、Laravelというフレームワークを採用することで、それを利用した技術者のスキルアップに繋がる点も多々あると思います。これは、Railsの軌道にのったRubyのエンジニアが急速に成長した時代を思い出しますね。

また、執筆された著者の方々、大変お疲れ様でございました。Laravelの今後の発展を祈っております!

 

ちなみに、Laravelはアルカナでも実際に使っていて、技術サポートでご協力させていただいたHAROiDさんのテレビ連動サービス「TOVY」という案件でもがっつりプロダクションで採用しています。

■テレビとネットを縦横無尽に横断するデジタルトイ”TOVY”|SENSORS(センサーズ)
 http://www.sensors.jp/post/tovy.html

■TOVY
 http://tovy.jp/

 

そんな感じで、Laravelを使った仕事をしてみたいサーバーサイドエンジニアの方は、人材募集をしているので興味があればエントリーくださいませ。

ReactとかAngularとかフロントエンドやりたい人だったりAWSとかMobingiとかでインフラ作りたい人だったりも募集しておりますので是非どうぞ!

http://www.s-arcana.co.jp/recruit/

 

という感じで、人材募集で締めくくるというプレイでした。

 

 

デワデワ。