こんにちは。
ウェブ系フリーランスエンジニア3年目になってきて、Laravel(ララベル)を扱うことが増えてきました。
Laravelを使っていく備忘録ととともに、これからLaravel(ララベル)を使うフリーランスの方のためになればと思い、まとめていきます。
Laravel(ララベル)ってなんだ?
フレームワークとは?
などなどの疑問に
フリーランス歴3年
ウェブ系フリーランスエンジニア歴3年の僕が答えていきたいと思います。
Laravel(ララベル)とは
Laravel(ララベル)とはPHPのフレームワークであり、PHPのフレームワークの中では一番人気といっても過言ではありません。
詳しいのこちら
Laravel は、MVCのWebアプリケーション開発用の無料・オープンソースのPHPで書かれたWebアプリケーションフレームワークである。LaravelはMITライセンスの下でリリースされており、そのソースコードはGitHubにホスティングされている[3][4]。マイクロソフトの.NETの開発に関わっていたTaylor Otwell が開発し、Taylorを中心としたコミュニティーが活発な開発を続けている[5]。
2019年2月現在、GitHubでのスター獲得数がPHP, Ruby, Python等のバックエンド系プログラミング言語のフレームワーク中で最も多いなど、人気のフレームワークの1つとなっている[6] [7]。
最新の5.8系の対応PHPはバージョン 7.1.3以上となっている
引用:wikipedia https://ja.wikipedia.org/wiki/Laravel
フレームワークは正直何でも良いとは思うのですが、なぜ、Laravel(ララベル)がおすすめなのか。
PHPを書く上で、なぜフレームワークを使う必要があるのかまとめていきたいと思います。
フレームワークとは
フレームワークは概念的な意味では枠組みのことですが、
システム開発をしやすくする雛形のことです。
雛形があれば、システムが書きやすいですし、機能だけ追加していけばいいので、作りやすいですね。
PHP開発の問題点
PHPのメリットとして、プログラムが誰でも簡単に書けるのでとても書きやすいというメリットがあります。
それゆえに自己流の開発をしてしまい、後々下記のような問題が引き起こされやすいです。
セキュリティの問題
初学者が自己流のプログラムを書くとによって、引き起こされるものは「セキュリティの甘さ」です。
システム開発の経験がない人がプログラムを書くと、どうしてもセキュリティをないがしろにしてしまいます。
というより、そこにあまり目を向けることができないということとセキュリティの知識がないのです。
単純なHTML/CSSだけのコードならまだしもシステム化をすると予期せぬところからセキュリティ攻撃をされる可能性があります。
その対策も視野に入れ、PHPなどを使うDBを含むシステムは考えなければなりません。
セキュリティのことを考え出すとぶっちゃけ割に合わなくなります。
しかし、Laravel(ララベル)などのフレームワークは既にセキュリティ対策が入っていますので、セキュリティなどを自分で解決して調べていかなくても大丈夫なのです。
Laravel(ララベル)などのフレームワークはそこがメリットと言えるでしょう。
メンテナンスの問題
自分流にプログラムを書いていくと、後々、なぜこのような書き方をしたのか分からなくなってしまうことも珍しくありません。
その時々で思いつきでシステム開発をしているので、コーディングルールやデザインパターンもフル無視で書いていることも珍しくありません。
それでは、後々自分以外の誰かが引き継いでコーダを書いた時にメンテナンスが難しくなってしまいます。というか、自分が後からシステムをまた作っていくときも困ってしまいますね。
Laravel(ララベル)などのフレームワークではコーディングルールが決まっていますので、後々メンテナンスをすることも可能です。
拡張性の問題
システム開発を一人で進めていくと、初めからがっつり「設計」をすることはあまりないのではないでしょうか? また、それが誰か
引き継いで制作を進めていくことや誰でもすぐにどのような作りかわかるように作ることも少ないのではないでしょうか?
どうせ自分がシステム開発を進めていくので、自分だけわかればいいやと思うかと思います。
しかし、ご自身が作ったWebサービスが人気が上がり、どんどん機能を拡張していかなけばならないとなった時困るのではないででしょうか?
そうすると結局作り直ししなければならない。のように無駄な時間を過ごしてしまいます、
しかし、Laravel(ララベル)などのフレームワークを使えば、大体の設計が最初からパッケージ化されているので、後々、困らずに機能追加をしていくことができます。
フレームワークの導入
上記の問題はシステム開発の「設計」ができれば、回避することができます。
システム開発の設計は上流工程なので、システム開発をする初学者は簡単に行うおkとができません。
最初から「セキュリティ」「メンテナンス性」「拡張性」といったものがしっかり考えられた設計のシステムがあったとしたら、誰でもセキュリティの対策がなされている、誰もメンテナンスができるプログラムが作成できるシステムがあれば、誰でも使いたいと思うのは明白です。
答えから言いますが、それがLaravel(ララベル)などのフレームワークなんです。
Laravel(ララベル)などのフレームワークの説明
Laravel(ララベル)などのフレームワークはライブラリのように機能を提供するのではなく、機能を使う仕組みも提供します。
Laravel(ララベル)などのフレームワークを使うと、プログラムの基礎の部分はLaravel(ララベル)などのフレームワークに入っているプログラムによって行われます。
Laravel(ララベル)などのフレームワークを使用するプログラマはフレームワークの仕組みを使い、必要な処理を追加していくだけで済みます。
基本的な部分はフレームアークの中身の部分が進めていくので、プログラマは追加の処理を書いていくだけで済むんですね。
フレームワークを使うことによって、セキュリティやメンテナンス性も担保されます。
主なフレームワーク
・CakePhp
・Symphony
・Zemd flamework
・Codelgniter
・Yii
・Larval(ララベル)
Laravel(ララベル)の特徴
Laravelの主要な設計ポイントとして挙げられる特徴は下記の通りである[9]。
- 「バンドル」は、Laravelのモジュールパッキングシステムである。 Laravelバンドルリポジトリーは、アプリケーションへ簡単に機能を付け加えられるように、予め用意されている。バンドルリポジトリーからbundlesディレクトリーにダウンロードしたり、"Artisan"コマンドラインツールを使い、自動的にインストールすることもできる。
- 「Eloquent ORM」は、データベースオブジェクト間のリレーションシップに制約を適用する内部メソッド(eagerローディング等)を提供するアクティブレコードを実装している。 EloquentはLaravelのクエリービルダーである「Fluent」のメソッドを完全にサポートしている。
- 「アプリケーションロジック」をコントローラーでアプリケーションに実装することもできる。また、Sinatraフレームワークと似たようなシンタックスを使い、ルートの定義を直接記述することもできる。
- 「リバースルーティング」で名前付きのルートにリンクを作成できる。 リンクを作成するときにルートの名前を使えば、Laravelは自動的に正しいURIを挿入する。 これを使うことにより、後ほどルートを変更しても、Laravelがサイト中のリンク全部を適切に更新する。
- 「RESTfulリソースコントローラー」はGETとPOSTに応答するロジックを分ける別の方法を提供する。例えば、ログインにおいて、コントローラーのget_login()アクションでフォームを担当させ、コントローラーのpost_login()アクションで、送信されたフォームを受け取り、バリデーションし、エラーメッセージと一緒にログインフォームにリダイレクトさせたり、各ユーザーのダッシュボードにリダイレクトさせたりすることもできる。
- 「クラスのオートローディング」はオートローディングの環境設定を保つ手間を省き、使用していない不要なコンポーネントまでロードしてしまうことを防ぐことが出来る。
- 「ビューコンポーザー」はビューがロードされた時点で実行されるコードブロックである。例として、ブログのサイドナビに見られる、投稿をランダムにリスト表示するものが挙げられる。コンポーザーは必要のあるブログポストを全てロードするロジックで構成してくれる為、ビューをロードすれば、表示する準備は全て予め済んでいる状態となる。これにより、メソッドのページコンテンツに関連する、ビューのモジュールで使用するデータのロードを、全てのコントローラー側で確実に行わなくてはならない手間を省くことができる。
- 「IoC (Inversion of Control)コンテナ」は新しいオブジェクトを生成するメソッドを提供し、随意にインスタンスを生成したり、シングルトンでの使用をできるようにするものである。IoCにより、外部ライブラリーの使用準備を行う必要性を大幅に減らしてくれる。また、きっちりと決まった柔軟性のないファイル構造に係わる必要はなく、IoCを使用したオブジェクトにはコードのどこからでもアクセスできる。
- 「マイグレーション(移行)」はスキーマのバージョンコントロールで、Laravelに直接統合されている。生成も実行も"Artisan"コマンドラインユーティリティーを使用して行うことが出来る。例えば、チームによる開発中に、他のメンバーがスキーマを変更したら、リポジトリーからコピーをローカル環境に置き、マイグレーションを実行すれば、自分のデータベースもアップデートされる。
- 「ユニットテスト」は、Laravelは重要視している。新しい変更が予期せず他の部分を壊していないか確認する為に、何百ものユニットテストを行なっている。ユーザー自身も"Artisan"コマンドユーティリティーを使ってテストを実行できる。
- 「自動パジネーション(改ページ)」は、"paginate"を呼び出し、ビュー内のページリンクを出力箇所を指定すれば、自動的に残りのページがパジネーションされる。パジネーションシステムは、簡単に手動/自動の切り替え等の設定・変更ができるように設計されている。
- LaravelはComposerでのインストールを推奨している(パッケージ自体が存在しない)。
引用:wikipedia https://ja.wikipedia.org/wiki/Laravel
うう、長い。意味わからんよー!となるのが普通なので、要約して説明していきます。
MVCフレームワーク
Laravel(ララベル)はMVCフレームワークで、アプリをM-モデル V-ビュー C-コントローラーの機能に分けて、整理し、パーツを作っていくことで開発を進めます。
MVCがほぼほぼのフレームワークで使われている「設計」ですので、基本的にMVCを理解していれば、どのようなフレームワークでも楽に使うことが可能なんですね。
低い学習コスト
Laravel(ララベル)はとてもコードがわかりやすいので、習得までそこまでの時間と労力が要りません。
フレームワークなので、非常に多くの機能を持っていますが、実装はとても簡単です。
勉強してすぐに使えるのがLaravel(ララベル)の特徴です。
勉強してみたい方はこちらの記事を読んでみてください。
ComposerとSymfonyの導入
Laravel(ララベル)は土台部分にsymfonyというフレームワークを使っています。symphonyは古くから使われているフレームワークなので、大規模システムの実績があり、とてもセキュリティが優れています。
また、Laravel(ララベル)はインストールにcomposerというパッケージ管理ツールを使っていますの、プログラムの管理が非常に簡単なのです。→導入が簡単ってことですー!
ORMとBladeテンプレート
Laravel(ララベル) はデータベースアクセスにORM という技術を使っています。
これにより、PHPのオブジェクトを扱うようにデータベースを扱うことができます。
画面表示にはBladeという独自のテンプレートを使用します。
このBladeを使うことにより、複雑に見えるところもわかりやすくかけるんですねえ。
まとめ
今回はLaravel(ララベル)フレームワークの概念的な説明となぜフレームワークがよく使われているのかについて説明しました。
次回からはLaravelを使って、何かを作りながら説明していきたいと思います。
実際開発をしているとフレームワークを使うケースしかないといっても過言ではありません。
RailsやLaravel、CakePHPなどのフレームワークの中の一つは最低でも使えるようにしておく必要があります。
フリーランスとしては単価が高い案件になりうるので、ぜひ勉強してみましょう。
それでは。
今回、参考にした書籍