ようこそ

「Laravel4でこなすプログラム術 Getting Stuff Done」 へようこそ。このようこそパートでは、この本から得られる内容を説明します。

全体の概要をご覧ください。

ようこそ
この書籍から得られる内容を説明します。
パート1 : 設計哲学と原則
このパートはアプリケーション作成時に従うべき、 一般的な設計原則についてお話します。
パート2 : アプリケーションの設計
実際のアプリケーションを設計するパートです。
パート3 : コンソールアプリケーション
次に、コンソールから使用できるアプリケーションを作成します。
パート4 : Webアプリケーション
今度は、Webアプリケーションを作成し、設置します。
追補
補助的な情報です。例えば、Composerのインストール方法などです。

第1章 この本の目的

この本はLaravelに乗り込み、あなたを旅へと誘います。できれば、皆さんをまだ行ったことのない場所へ案内し、まだ見ぬ景色をお見せできますように。これは旅行談です。私達は目的地(作成するアプリケーション)を決め、そこへ向かう道すがら、景色の素晴らしい場所を案内していきましょう。目的地に到着したら、私に手紙でも投函してください。(chuckh@gmail.com)この旅の感想に、興味津々なのです。

これは経験するための本です。使用するための本です。内容に従い、各章のアプリケーションを作成してください。各章の内容は連続しています。各章の中のセクションも、前の内容の続きです。この本の全箇所は、それ以前の内容を基にし、構成してあります。

各章の中のセクションは、「都市」だと考えてください。章は国です。パートは大陸で… はい、はい。分かりました。無理やり旅行に例えるのは、もう十分ですね。

この本全体を通し、Laravel4を利用したアプリケーションの段階的な作成に主眼を置いています。

典型的なマニュアル本ではありません

できるだけ実際の設計と開発のプロセスにそっくりになるように書きました。 出だしでしくじり、設計を変更し、リファクタリングを行なっています。

ニヤつかないように、忠告しておきますよ。

この本で行わないこと

  • Laravelの全部を取り扱いません。この本はフレームワーク全体の参考書ではありません。
  • キャッシュ、イベント、ログは取り扱いません。重要な話題ですが、これから作成するアプリケーションには必要ありません。
  • キュー、認証、クッキー、セッション。これらも重要です。しかし、必要ありません。
  • データベース。これを決めるのは心苦しいことでした。Fluent クエリービルダーEloqunet ORMはLaravelのとても重要な機能ですからね。とても有名です。評判通り実装は完璧です。でも、残念ながら、使用しません。なぜなら…お考えの通り…作成するアプリケーションには必要ないからです。

では、何を教えるのでしょう。

主に、アプリケーションの作成に置いて、私が何を行なっているか、どうして行なっているかの秘密をばらしています。ある部分には、みなさん同意してくれるでしょう。ある場合では、きっと皆さんは私を完全に抜けていると考えるでしょう。そういう時は、できれば 「ああ、そうか。面白い冗談だな。」 と考えておいてください。しかし、最終的には、使える本当のシステム作成の根本を身に付けてもらえるでしょう。

第2章 読んでいるのは、誰ですか?

ほとんどの書籍では著者についての情報から始まりますが、本当に重要なのは「読者の皆さんが誰なのか?」です。

私は皆さんを以下のような方々であると推測しています。

  • 大抵の人々より、コンピューターについて詳しい。
  • プログラマーである。
  • PHPでどのようにプログラムを組むか理解している。たぶん多少なりとも知っている。たぶん良く知っている人もいるだろう。
  • Laravelについて聞いたことがある。( これは、さほど重大な問題ではありません。 これからLaravelについて説明するのですからね。
  • プログラミングが好きだ。もしくは、最初にコンピューターへ命令を従わせた頃のような、 情熱を取り戻したいと願っている。
  • あなたの名前がTaylor Otwellでないこと。なぜなら、もしもそうであるならば、この本は価値がないだろう。

初心者にも学んでもらえるように、また中間レベルのプログラマーの方でも十分に興味深く読んでもらえるよう、ベストを尽くしました。

最低ライン

Laravelについてもっと学びたい意志を持っていることです。

第3章 私は誰でしょう?

私についての章ですから、熱心に読むようものではありません。 なにせ、Laravelについては、一言も触れませんからね。 賢い皆さんなら、今すぐ次の章へ飛ばすでしょう。

こんにちは。私の名前は、Chuck Heintzelmanで、コンピュータープログラムを書いています。

(何だかサポートグループのフロントマンだった頃のようです。お願いですから、”Hi Chuck”と返事しないでください。)

真面目な話、9学年の時からプログラムを書いています。学校から借りていた BASIC言語リファレンス マニュアルにくびっきりになり、アステロイドに似た薄っぺらいゲームを書いていました。違いは小惑星があなたに向かって飛んでくる代わりに、他の宇宙船から死の細長い白いブロックが発射されることでした。

長時間に渡るデバッグの後、TRS-80へプログラムを「大容量ストレージ」(カセットテープのことです)に保存/読み込みをじっと待ったあと、そのゲームはついに動作しました。実に33年前のことです。コンピューターの恐竜時代に戻ってみれば、大きな獰猛な猛獣が温度調節された部屋に詰め込まれていました。いいえ、 本当に パンチカードを使ったことはありませんよ。けど、使われているのを見たことならあります。

それから、Fortran、COBOL(ええ、知っていますとも)、アセンブラ言語、Basic、C、C++、C#、Java、Pascal、Perl、Javas、PHPでプログラムを書いてきました。他にも多くの、とても多くの言語を触って来ました。でも、実際に他の人に使ってもらうプログラムは書いていません。

Fortune500に入っている会社のために、システムを作成したこともあります。同時に、家族だけで営業している商店のためにも作成したことがあります。Xenix上で動作しているメールオーダーシステムから、PHPで動作しているWebアプリケーションまで全てです。それから、今日のインターネットの繁栄前( 本当の インターネットの始まりではありません。90年台中頃に始まった刺激的なネットブームの前のことです)に、いくつかの会社と.comを立ち上げました。こうした経験を通じ行なってきたこと、つまりコンピュータープログラムを書くことを私は愛しています。

やれやれ?はい、わかりました。私の自慢話はもううんざりですね。

私の言いたいことは

私のキャリアーの中で、今までプログラムの本を書こうと思ったことは、一回もありませんでした。 これを書いている唯一の理由は、 Laravelだからです。

第4章 Laravelって、何?

よく耳にする人は、手を上げてください。

今まで皆さん、自分の会社で既存のシステムへ、機能追加を した経験をお持ちでしょう。 不幸なことに、そのシステムがPHP4で書かれていて、 誰がもともとのプログラマーであったにせよ、 彼らは「Wordpressに夢中」動画を何度も見たのであろうと推測するでしょう。

クラス未使用、たっぷりのグローバル変数、5万ピースのジグソーパズルそっくりな構造を 「ため息」と共に、引き付いだのでしょう。

あなたは自分の仕事、狭い視野しか持たない管理チーム、 最初にプログラムでお金を稼ぐことを思い立たせた何かを 恨みます。

何と言っても、プログラムは楽しくなくてはなりません。そうでしょう?

ここに全てがあります。

Laravelへ飛び込んでください。

(はい、ここでドラムロール!ダダダダ、ダダダダ、ダダダダ、ダダダダ。)

Laravelはプログラミングを再び楽しくしてくれる、PHPフレームワークです。

冗談だろう…ただのフレームワークかよ!

Laravelは新しい言語ではありません。フレームワークに過ぎません。全ての誇張を取り去り、ただ観察してみれば、LaravelはただのPHPフレームワークです。

たとえそうだとしても、私はLaravelのWebサイトのモットーに深く共感します。

「Web職人のためのPHPフレームワーク」

Ruby on Railsは、 ただのフレームワークです。 それでも、その背景には自由を見て取ることができます。

Laravelは決してPHPスパゲティーコードを魔法のように修正してくれません。しかし、仕事をこなすための新しくて早く、エレガントな方法を提供してくれます。 (注目:仕事をこなす(Getting Stuff Done)のコンセプトはこの本の中に何度か現れてきます。)

簡単に言えば、LaravelはPHPプログラミングを楽しくしてくれる構造を提供しているのです。あなたは読み書きしやすい、スタリッシュで保守がしやすく、将来の拡張にそなえた方法へ、既に存在するコードをリファクタリングすることができるようになります。

Laravelは万能薬ではありません。既にあるコードベースがひどければ、「いま、どこにいるんだ」「どこですべきか」に改善するには、苦痛が伴います。これは私達、ソフトウェア産業の本質なのです。

しかし、あなたがシンプルで、読み書きしやすく、 (ここにもっと、どんな単語を追加したら良いでしょうか?) してくれるフレームワークに変更しようと考えているのなら、Laravelが答えです。

第5章 Laravel使用の正当性

こんな問題があります…

あなたは自分が所属している会社の束縛の下で働いています。 すなわち、既存のソフトウエアをサポートし、既存のシステム上で滞りなく動作する 新しいコードを開発しなくてはなりません。 .NetとJavaが混じっているかも知れませんが、 存在するほとんどのコードはPHPです。

最近、あなたはLaravelを見つけ、惚れてしまいました。新しい開発に使用したいと思っています。

どうやって、Laravelへ移行する正当化を主張したらよいのでしょうか?

しばらく、探偵の役を演じてみましょう。

ふーむ。私の知っている探偵は(テレビのシリーズだけですが)、証拠と動機を探す場合、お金の流れを追いかけるようです。ですから、お金を追求しましょう…

顧客は商品とサービスの交換として、お金を提供します。良い商品であれば、より多くの顧客が欲しがり、より多くのお金をビジネスに支払ってくれます。

管理者達はビジネスを繁栄させたいことでしょう。彼らはできるだけ多くの顧客と、できるだけ頻繁に、できるだけ高額の取引を望みます。

管理者の視点で考えてみましょう…

  • 顧客をより幸せにしたい。
  • 新しい顧客を獲得したい。
  • 顧客の幸せとは、期待に答えることだ。
  • プログラーマーたちには、時間通りに要求を提供できるようにしたい。
  • プログラムチームはアジャイル(機敏)でいて欲しい。 (これが意味しているのが 何であれ…後述をご覧ください。)
  • 顧客が望む機能をタイミングよく提供したい。
  • 素晴らしい製品を提供する、素晴らしい開発者が欲しい。

アジャイルとは何を意味してきたのか?

皆さん、余りにも頻繁にこの言葉を言ったり書いたりして、意味なんて無くなったんじゃないですか? ほとんどスマーフと同じでしょう・・・全てスマーフしている、スマーフ可能、スマーフ的。1 アジャイルもこうした言葉の一つです。昔のもったいぶった言葉です。これが全部アジャイルです、あれがアジャイルです。 人々は繰りかえすソフトウェアの手順や何か他のことについて話しているのでしょうか? それとも魔法のようなことについてでしょうか?私は本当に分かりません。

上のリスト項目が管理者の視点であれば、Laravelの使用は簡単に正当化できるでしょう。

  • 顧客はニーズを提示され、それを満たされた時、幸福である。
  • 顧客は期待が実行されると、更に幸福になる。
  • Laravelフレームワークが提供するのは…
    • 機能の拡張を用意にする。
    • 設計のベストプラクティスに従わせる。
    • 多くのプログラマーに効果的に協力させられる。
    • プログラマーを幸福にする。(管理者が覚えておくこと:幸福なプログラマーは生産的なプログラマーである。)
    • 仕事をこなすのが早くなる。
    • ユニットテストと、アプリケーションのコア構成物を熟考しテストすることを推奨できる。

プログラマーたちがより多く、より早く仕事をこなし、Webアプリケーション開発で代々伝承されている多くの障害物を取り除く能力をLaravelは管理者へ授けてくれます。

正当化するのは簡単です。ですよね?

第6章 なぜプログラマーはLaravelを好むのか

早速、本題に入りましょう…なぜ、プログラマーはフレームワークにLaravelを使いたがるのでしょうか?

フレームワークへの憧れについて、少し話をさせてください。

(今、セラピストと話している映像を思い浮かべています。彼は賢人ぶって頷いています。パイプで一服し、一言話しかけます。「Zeeフレームワークへの憧れついて、話してください。」)2

私はPHPで書かれたプロジェクトに携わらなくてはなりませんでした。学校における飛び級のように、“class”の概念をすっ飛ばした開発者により書かれた、PHP4のプロジェクト達は膨大に膨れ上がっていました。通りの向こうにはRuby開発者が見え、地震、竜巻、もしくは雷でもかまわないので、彼らのいるビルの、その階が自然の脅威に見舞われることを静かに祈っていました。

(これが私を悪い人間にしたのでしょうか?)

これはRubyがまだ新しく、輝いていた時のことです。(Rubyは言語として素晴らしく素敵な一面を持っているにせよ)Rubyを素敵に思わせたのは、言語自身ではありません。

全ての開発者はRuby on Railsに群がりました。

では、なぜ彼らは群がったのでしょう?

なぜなら、面白い開発方法を約束していたからです。面白いとは、パワフルで、読み書きしやすく、素早い開発のことです。私はRoRがプログラミングを再び、喜びに満ちたものにする雰囲気を醸しだしたのだと確信しています。RoRによりもたらされるコーディングの喜びは、私達全員にプログラムへの欲求を起こさせる、プログラミングを始めた頃の刺激と同じものです。

PHP界を鑑みると、とても悲しい状態だったでしょう?太郎に次郎に花子さん3は「PHPプログラマー」です。だって、Wordpressのインストールができるんですから。

(Wordpressについては次の章、「WrodPress:良い点、悪い点、ひどい点」をご覧ください。)

しかし、だめでした。プロジェクトはPHPのままでという要求に縛られ続けました。私達はRuby開発者のように、格好良くはいきませんでした。彼らは最先端でした。彼らは言語の垣根を超え、名声を手にした人々です。

そこにやってきたのがLaravelです。LaravelはRuby on Railsの一番良い部分をPHP界に取り入れてくれました。突然、PHP開発者は別々のスクリプトの代わりに、コントローラーへのルートを使い始めました。DRY(Don’t Repeat Yourself:自分で繰り返すな)のコンセプトが意味を持ち始めました。Smartyテンプレートだけが提供していた方法で、PHPの真髄と融合した”Blade”テンプレートエンジンを突然手にしたのです。素早く開発でき、読み書きしやすい、PHPのポテンシャルにおける解脱の境地を手にしたのです。

私がLaravelが凄いと言っているように聞こえますか?正にその通りです。

第7章 Wordpress:良い点、悪い点、ひどい点

Wordpressはブログに革命を起こしました。ブログを大衆のものにしました。もちろん、BloggerやLivejournalのような他のプラットフォームもありますが、WrodpressはPHPにより書かれたシステムとして、パブリックドメインの中で大きく、人気を得たのです。

Wordpressの登場により、誰もがブログプラットフォームを好きなように動かすため、PHPスクリプトをハックできるようになりました。

「大きな力には、大きな責任が伴う。」 Benおじさん(スパイダーマンより)

残念ながら、力強いWordpressの利用には、責任が伴わなかったようです。スクリプトは全体の設計やユーザビリティを全く考慮されずハックされました。問題に輪をかけたのは、WordpressがリリースされたのはPHP4の時代であり、言語には真のプログラマーが保守可能なシステムを構築できるだけの能力がありませんでした。

WordpressはPHPに起きた最高の出来事でしたが、言語としての面では最悪の出来事だったのです。

少なすぎる職人の管理下で、多すぎる成功が生まれたケースです。

これにより、PHPに汚名が被せられました。

Softwarati4

定義:自分の考えに夢中になり、言語に対しコメントを言う、プログラムの知識人。

たぶんあなたが考えているのは…Softwaratiによって、良く引用されるセリフのことでしょう。

「ああ、PHPはかわいそうな人々の言語だろう。ひどいし、保守できないしね。でも動くんだよね…ほとんどの場合。」

ありがたいことに、Softwaratiのお高くとまった鼻面に蹴りを入れるため、Laravelがやってきました。

第8章 本書の規約

この書籍では、規約をいくつか使用しています。

コードは2つの空白でインデント

通常、私は4つの空白をインデントで使用していますが、この書籍は様々な電子書籍フォーマットとして利用されるため、小さいスクリーン向きに、横幅を狭くしておくのは重要です。

1 for ($i = 0; $i < 10; $i++)
2 {
3   echo "I can count to ", $i, "\n";
4 }

これはヒントです

これは特に便利な情報にハイライトを当てる場合に使用します。

これは警告です

これは何か、注意喚起を促す場合に使用しています。

これは情報ブロックです

これは重要な情報を繰り返す場合に使用します。

何かを行う場合です

この記号があったら、コーディング、もしくは他の行動を実際に行なってください。 指示が書かれています。

?>はタグが開かれている場合に使用しています。

実際のコーディングでは、最後の?>をいつも省略しています。この書籍を書いているエディターでそうしてしまうと、全てがおかしくなってしまうのです。そのため、この本の中ではPHPブロックをPHPタグで開いた場合、毎回確実に閉じています。例えば:

1 <?php
2 class SomethingOrOther {
3     private $dummy;
4 }
5 ?>

PHPの開始タグと終了タグ

コードのサンプルの中で、時々必要がないPHPの開始タグ(<?php)が使用されています。(例えばファイルの一部分を示す場合です。)時々、終了タグ(‘?>’)も不必要ですが、ついています。

1 <?php
2   function somethingOrOther()
3   {
4     $this->callSetup();
5   }
6 ?>

本当のPHPコードでは、私は いつでも ファイルの最後の終了タグを省略しています。タグが必要かどうかは皆さんの判断に委ねています。注意していただきたいのは、サンプルコード中の開始タグと終了タグを記述されたまま、受け取らないでください。

どんなOSを使用しているか?

私はこのマニュアル、コード、その他をDebian、UbuntuベースのLinux Mint 16上で作成しています。これは基本的にはUbuntu 13.10と同じものです。