読者です 読者をやめる 読者になる 読者になる

プログラミング勉強メモ

不真面目 Web プログラマーの勉強メモとか

手探りで laravel でブログを作る その 0

前回の記事から結構時間が空いてしまいました。 言い訳するとちょっと仕事が忙しくなって帰宅後眠くて眠くてやる気出なかったんですよ。 まぁ、その割にはニコ動みたりして寝るの遅くなったりしてたんで本当に言い訳ですね。

とりあえず、最初の記事らへんに書いた通り laravel でブログを作るのが目標なのでまずは DB 設計と仕様を考えるところからいきますよー

ブログに実装したい機能とか考える

とりあえずパッと思いつくことを優先度が高い順にあげていきます。

  1. ブログの投稿
  2. ログインしてる人だけ投稿とか編集できるようにする
  3. タグをつけれるようにする
  4. タグ検索
  5. カテゴリーをつけれるようにする
  6. カテゴリーで検索
  7. レスポンシブデザイン
  8. マークダウンで投稿できる
  9. 画像投稿
  10. 投稿したときに Twitter にも連携してつぶやかれるようにする

……パッと思いつくのはこれぐらいですかね。どうせ私しか利用しないですし。 8 と 9 と 10 はホントに出来たらやるぐらいの気持ちです。 ゲームのネタバレを含む感想を語りたいときに使うブログの予定なので、画像を投稿したいと思うときがあるのか疑問ですしね。

DB のテーブル設計をする

実装したい機能 1 ~ 6 までを考慮して考えていきますー。 9 も設計に関わる要素だと思いますが、今のところ絶対実装したいわけでもないですし所詮個人で開発した自分しか使わない奴なんで、画像投稿したいって思ってから作り変えます。 必要なテーブルは

  • 記事テーブル
  • タグテーブル
  • タグと記事を結びつけるテーブル
  • カテゴリーテーブル
  • ユーザーテーブル

の 5 つですかね。 私しか使わないのにわざわざユーザーテーブル用意するのはどうなの感がありますが、ユーザーテーブルがある方がログイン機能実装が楽っぽそうなので用意します。 次はそれぞれのテーブルの属性名とか型とか決めていきます。

articles(記事テーブル)

属性名 id
id unsigned smallint(5) 記事のid(主キー)
title varchar(30) 記事のタイトル
body text 記事本文
category_id unsigned tinyint カテゴリーのid(外部キー)
created_at timestamp 作成日
updated_at timestamp 編集日

よくあるブログのチュートリアルではここに投稿者のユーザを格納する属性があるんですが、投稿したりするのは私一人だけなのでなくしました。 idsmallint は記事の総数がそもそも 6 万まで届くことなさそうですし、絶対 int が必要なほど投稿しないです。 あとは値がマイナスになることがないので符号なしにしてます。

カテゴリー、多対多にするか悩んだんですけど一つの記事にカテゴリーは一つの方向性でいきます。ゲームの感想はゲームの感想、日記は日記と同じ記事内に違うカテゴリーのことを書きそうにないので……。ワードプレスとかはカテゴリー複数指定できる仕様ですね。まぁ、好みの問題かと。

tags(タグテーブル)

属性名 id
id unsigned tinyint(3) タグのid
name varchar(30) タグ名

タグとか絶対総数 255 を超えることはないだろうで tinyint にしました。 namevarchar(30) はあれです、とりあえず 30 あればいけるでしょの精神です。

article_tag(記事とタグの中間テーブル)

属性名 id
article_id unsigned smallint(5) 記事のid(主キー、外部キー)
tag_id unsigned tinyint(3) タグのid(主キー、外部キー)

laravel の中間テーブル名は公式ドキュメントによると、複数形ではなく単数形でアルファベット順にアンダースコアで繋ぐっていう感じっぽいです。 属性は2つとも外部キーかつ複合主キーでいいはず……たぶん。

categories(カテゴリーテーブル)

属性名 id
id unsigned tinyint(3) カテゴリーのid
name varchar(30) カテゴリー名

タグと同じノリですね。これ以外に値ないですし。


laravel で実際にコーディングする前に考えておかないと駄目なのはこれぐらいですかね (-ω-)

次の記事からコーディングやっていきます。

とりあえず公式ドキュメント進めよう その 4

昨日は帰宅が遅くて帰って速攻寝てました。ゼルダ一番くじやりに店に行ったら売り切れてました。やっぱ発売日に行かないと駄目ですね(´・ω・`)

タスク削除

中級編も全部おわりましたー。チュートリアルをざっとやってみた感想は、laravel の雰囲気が分かったていう感じですかね。雰囲気しかわかってないので、全然具体的なことわかってないです。

後は、チュートリアル以外のマニュアル部分を読んで実際にブログをコーディングし始めたら段々わかってくると思うので、その時頑張ります。

とりあえず公式ドキュメント進めよう その 3

laravel5.2 公式マニュアル中級編スタート

中級編スタートしていきます。あと今更気づきましたが、lalavel じゃなくて laravel なんですね……。いかに私が適当かよくわかりますね(´-ω-`)過去の記事で誤表記してた部分気づいた部分は修正しました。アクセス数ほぼ 0 なブログですけど、放置するにはちょっと恥ずかしい。 とりあえずインストールから始めます。

インストールとデータベース準備

composer create-project laravel/laravel="5.2.*" quickstart --prefer-dist

公式マニュアルにはバージョンを指定してないコマンドがかかれてますが、今それをやると 5.4 がインストールされてしまうので指定しときます。

よーし、php artisan migrate を実行したら OK だと思ったらエラー。うん、また なんだ。データベースの接続設定書き換えるの忘れてたね。さくっと前回と同じように書き換えて、無事にテーブルが作成されました。

モデルにリレーショナルの設定を書いていきます。laravel のリレーショナルの設定は関数なんですね。

ルーティング

認証に必要なファイルをコマンド打てば自動で作ってくれるって楽ですねー。しかもログインに必要なテーブルも既に準備されてるっていいですよね。自動生成された AuthController さらっと中身みたらバリデーションまで設定してくれてる……。なにこの子すごい。

レイアウトとビュー

前の時から思ってましたが、ブートストラップ使うことを結構推奨してますよね。実はほぼブートストラップ使ったことないです。クラス名把握するのがめんどくさすぎて……。プルダウンメニューぐらい JavaScript で実装するのそこまで苦じゃないですし、Sass ならレスポンシブデザイン割と簡単にできますしね。まぁ、でも覚えといて損なことはないのでもうそろそろ覚えるべきかもしれません。

タスク追加

削除ボタンの追加まで進みました。ここら辺まで来ると「ほーん」って感じになりますね。理解できるような理解できないようなみたいな。とりあえず、よく使うデータベース操作は新しくクラス作ってそこに処理書いとくと、いろんなところで使いまわせて便利っていうことでしょうか。

眠いので今日はここまで。

とりあえず公式ドキュメント進めよう その 2

昨日書いた記事読み直して、これ勉強メモじゃなくてただの記事じゃねえかと思いましたが、これブログなのでなんも問題ないですね。ブログのタイトルを勉強メモとか書いてるからおかしいことになってるんですよ。でも特にいいの思い浮かばないのでそのままでいきます。

タスク追加

このチュートリアルでは、ルートにバリデーションとかの処理かいてますが lala 帳ではモデルとかコントローラーに書いた気がします。これ、どこに処理を書くのが良いんですかねー(´-ω-`) CakePHP では規約に縛られるおかげで、処理を書く場所とか深く考えずに書けてたんですけど laravel では自分で考えないといけないですね。この問題についてはチュートリアルが終わったら、チュートリアル以外の公式ドキュメント読みこんだり、できる人が書いた記事とか探したりして模索していきます。

タスク削除

そういや lala 帳の方のチュートリアル進めてて知りましたが、 laravel にも HTML ヘルパーあるんですね。ただ単に自分で入れないと使えないだけでした _(:3」∠)_

みせかけのメソッドとか説明されてますけど、正直イマイチピンと来てないです。まぁ、CakePHP だってチュートリアルやほかの解説サイトにこう書けって書いてたから書いとこうっていうノリでやってましたし、いつか慣れる。

というわけで、チュートリアル基本編無事に終わりました。引き続き中級編進めていきます。

とりあえず公式ドキュメント進めよう その 1

日本語公式ドキュメントにあるチュートリアルを進めていきます。詳しい説明とかコードはそっちをみてください。ぶっちゃけ、この記事は説明じゃなくてただその時思った感想書いてるだけですので……。

インストー

PHP7 を勉強しようとした名残(すぐやる気なくした)ですでに XAMPP と Composer はインストール済みなので laravel5.2 をインストールします。

composer create-project laravel/laravel="5.2.*" quickstart --prefer-dist

パスを通せばもっと短いコマンドでインストールできるらしいですが、職場でチャレンジして挫けたので諦めます (:3」∠) こっちでも別に問題ないですしね。

職場でも思ったんですが、このインストール結構時間かかりますよね……。エラーが出たり固まったりしないかヒヤヒヤします。

データベースの準備

CakePHP も 3 から追加されたらしいマイグレーションを使ってデータベースを設定します。

cd quickstart
php artisan make:migration create_tasks_table --create=tasks

phpmyadmin で今までちまちま設定してたのでこれすごい楽ですよね。世の中どんどん進化してるなー。

php artisan migrate を実行したらエラーがでました。そうだね、 .env ファイルの中身書き替えるの忘れてるよね。ついでにデータベース作るのも忘れてるよね。

というわけで phpmyadmin でサクッとチュートリアル用のデータベース作って、.env をこんな感じに書き換えました~。

//データベースの設定部分のみ抜粋
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=quick_start
DB_USERNAME=root
DB_PASSWORD=

どうせ常に xampp 立ち上げっぱなしにしたりしてないので mysql も初期設定のままパスワードとか設定してないです。職場の方はちゃんと設定してるので見逃してください。

これで無事にテーブルが作られました。

Eloquent モデルファイル作成

CakePHP ではベイクコマンドでデータベースからファイルを自動生成してましたが、laravel にも似た感じの奴があるんですね。

php artisan make:model Task

今の時点ではイマイチ何をするクラスか分かりませんが、たぶんテーブル操作系の処理を書くんですかね。チュートリアルにも後で詳しく説明すると書いてあるので、細かいことは気にせず次に進みますー。

ルート定義

クラスとアクションを記述しなくても CakePHP のルーティング的な奴で View の表示ができちゃうとかヤバいですよね!ここら辺の仕様は職場でも 5.1 のチュートリアルしてて一人で感動してました。

レイアウトとビューの作成

php を完全に分離できるのはデザイナーの人に css の作成頼むときにありがたいなーと思いました。デザイナーの人が css 書くときとか CakePHP だと大変そうだったんで……。CakePHP のヘルパーも HTML 自分でいちいち書かなくても良いていうのは楽で好きですけどね。

今日はここまで

とりあえず公式ドキュメント進めよう その 0

よっしゃやるぜ!と意気込んでたら……

laravel 勉強の第一歩として公式ドキュメントにあるチュートリアル進めればいいかなぁと軽い気持ちで公式サイトの日本語ドキュメントのページに行ったら、最新版(5.4)のドキュメントにはチュートリアルがなかった(´・ω・`) 普通に個々の機能とかのドキュメントはあるけど、フレームワークは CakePHP2 しか使ったことのない私にはそれだけ見ても全然書き方とかが違うからチンプンカンプンでした……。

「しゃーない、チュートリアルがある中で最新の 5.2 のドキュメント読みながらやろう。同じバージョン 5 だし大体一緒でしょ」と思って 5.2 のチュートリアル見ながら 5.4 をインストールして進めてたら序盤からファイルの場所が違ったり、名前が違ったりしてて laravel の l の字も知らない私には読み替えながら進めることはできませんでした。

同じ 5.* 系なのにここまで違うとは思わなかった……。しかも半年に一回バージョンが変わって LTS バージョン以外はサポート期間も短い! じゃあ、LTS のバージョンである 5.1 を勉強すれば作ったやつをすぐにバージョンアップしなくても行けるかとも思ったんですが、5.1 がリリースされたのはどうやら 2015 年ごろっぽいんですよね。

これ、もうすぐ新しい LTS のバージョンが出る時期じゃないですかー! やだー!

英語できるだけ読みたくないマンなので、具体的に新しい LTS がいつ出るかとか全然調べてないですが日本語ドキュメントのトップページに「2年ごとに新しい LTS リリースされるよ!」って書いてあるので遅くとも半年ちょっとで新しい奴が出るんですよねー。まぁ、とりあえず laravel ってこんなもんっていうのが分かったら普通に機能や仕様を説明している部分も理解できると思うので、最新バージョンから勉強始めるのはやめます。

ちょうど、来月から作成が始まるシステムについて laravel でも CakePHP でも使いやすいやつ使っていいよと上司のお墨付きもらったんで、色々調べて見つけたララ帳というサイトにあるめちゃくちゃ分かりやすい 5.1 のチュートリアルを職場で進めつつ、家では 5.2 の公式チュートリアル進めていこうかなぁと決めました。

今日職場でララ帳をちょっとだけ進めましたが、URI がコントローラー名に縛られないとか View の自由度の高さとか、CakePHP の規約第一主義にすっかり染まってた私には目からウロコなことばっかですごく楽しかったです。

仕事中に個人的なブログを書くわけにはいかないので、ここに書くメモ的なものは 5.2 の公式チュートリアルに関して書くことになりそうです。

自己紹介と目標

自己紹介

社員数が片手に収まるか収まらないぐらいの会社で Web プログラマーやってます。 使っている言語は PHP と HTML 、 CSS 、Sass 、JavaScriptJQuery です。 ゲームが大好き過ぎて、自宅でプログラミングの勉強なんてほぼしてないクズです。

目標

「 laravel を使って自分好みのブログサイトを作る」

フレームワークは CakePHP2 を使っているのですが、CakePHP3 にもうそろそろ乗り換えようかなぁと色々調べてたら CakePHP 自体の人気が下がっていてびっくりしました。そして今 PHP でアツいフレームワークは laravel で、転職した先輩も「面接で lalaval についてよく聞かれたから勉強しとけ」とアドバイスをもらったので頑張って laravel 使えるようになりたいなぁと思ったり。

自己紹介でも書きましたが、プログラミング嫌いじゃないですが、それよりもゲームをプレイするのが好きなので本当に家で勉強しないんですよね。何度か「勉強しよう!」と思って本買ったりしてやり始めるのですが、FF15 が発売したりニーアオートマタやゼルダの伝説 BotW が発売されるとそっちに夢中になって 全っ然 勉強しなくなるんですよ(;´Д`)

来年度から転職したいなぁと考えてるくせにコノママジャダメということで勉強のメモや進捗をネットの海に流すようにすれば続くんじゃないだろうかという浅はかな考えではてなブログにアカウント作りました。

こんなクソ野郎ですが、よろしくお願いします。間違ったこと書いてたらバンバンコメントで指摘してくださいm(__)m