魔法使いの卵

WEBエンジニアの卵の成長記録

初心者PHPerが初めてLaravel4をつかってリリースまでやった振り返りとできないエンジニアの特徴3点。

まいど。うんこです。

約2ヶ月前の話。


Laravel4導入してみたったで - 魔法使いの卵

 

そう、Laravel4をつかって開発を始めて約2ヶ月。

先日先輩上司に助けられながらようやく社内サービスをリリースできたーw

 

そこで、できる人にはわからない。

わからない人にはわかることを書きたい。

ついでに俺みたいな初心者PHPerがLaravelを触って参考になればいいなってw

つまり、なにが言いたいか?ってできないエンジニアは

どこでなんでできないのか?について忘備録代わりにつらつら書きなぐってみる。

 

ルーティング

ルーティングってなに?
コントローラーとなにがちゃうの?
ってそもそもこいつなんなん?
ってところで理解できなかった。
すごい簡単にいうと指定した指定したメソッド
動かすページを指定しているっていうイメージ
を自分でもつことで納得することができた。

 

ビルトインサーバ

コマンド1発でPHPの開発仮想サーバが立ち上がる
「おー最強に便利やんわろたw」
っていってたのも束の間。
外部サーバを使った時にlocalhostって
コマンド叩いたら表示されたらそのままurlを
叩いてみてもいつまで経っても繋がらない。
なんでやー!!って頭抱えてみたら
localhostってあくまで外部サーバの中ではの話で
自分の開発マシンのブラウザを通して処理結果を見るときは
どのサーバの仮想サーバにつなげるかをurlで指定してあげないと
そりゃみることでけへんよな。ってところでハマった。

 

マイグレーション

これもルーティングってなに?
ってなってすごい理解するのに時間かかった。
簡単にまとめると
マイグレーションファイルをコマンドで作ります。
作ったマイグレーションファイルってDBのテーブルの情報を
つくってあげるためのファイルやねん。
だからここでなんのテーブルをつくるのか?
データ型はどうするのか?とかの設定をしてあげる。
ほんで最終的にそのマイグレーションファイルを実行することで
設定したカラム情報等が用意されてるテーブルが生成される。
で、1回実行したマイグレーションファイルは
Laravel4自体が覚えてるみたいで再度実行することはでけへん。
これも理解するのに相当時間かかった。
冬休みほぼこいつを理解するのに時間つかった。

 

seed

テストデータをぶっこみたい。
そうおもってたけどどうやればええんかわからん。
つか書き方もどれが正しいのかわからん。
この時ぐらいからドキュメントを見るようになってきた。
1回やり方がわかればできるようになるねんけど
その1回の壁がすごい高いねんなぁって自分で認識し始めた。
データベースの中にクラスをつくってあげたらいいのかーって
わかってからはあとは自分の入れたりテストデータの形に合わせて
書くだけだったからそんなにはまることはなかったかな。 

 

timestampsとsoftdelete

この2つもすごいわからなかった。
ドキュメント読んだりツイッターで質問したり
いろいろ自分で試行錯誤して最初は使わないでやろう
とおもったけど使う人のことを考えたらそれはないわw
って思い再度勉強しなおしたところ。
マイグレーションをtimestampsとsoftdeleteの
カラムを用意してモデルにつかうでーってこと書いたけど
seedにどうかけばええんかわからんかった。
自動でカラムが生成される意味がわからんかった。
便利なんやけどなんで?ってなってた。どこにも
つかうなんて書いてへんしなんで?なんで?って
その機能自体の動きが理解できなくて「?」いっぱい。
 
timestampsを使えば
created_atとupdated_atのカラムが自動生成される
softdeleteを使えば
deleted_atのカラムが自動生成される

だからseedにはそのまま自動生成されたカラムを書いてあげたらいいだけだった。

これ理解するのに2週間近くかかったとおもう。

softdeleteを使った時にすでにあったレコードが消えた。
え?なんで?っておもったけどこれもsoftdeleteされたレコードを
抽出すること条件を書いてなかったから。ハマりまくったw

 

DB操作

sqliteを使っての開発でcuiで初めてdb操作をおこなった時
どうやってデータベースをみるのか?どこにテーブルがあるのか?
そのへんがまず根本的にわからなかった。
まじでわからんかった。
sqlite3のコマンドをぐぐって解決した。
なんかそういう根本的なところでよくつまづく。

 

バリデーション

バリデーションがなんなのかっていうのは知ってて
問題はそれをどうLaravel4を使ってやるか?ってこと
幸いにもこのへんはドキュメントを読む癖がついてきてから
上記のやつに比べて実装時間は短くなってきてた。
ただ、バリデーションを手動でテストするのが
すごいめんどくさかったこととリダイレクト先を
入力フォームに返さないといけないっことを知らなくて
どこでもリダイレクトバックつかってたw
ハマったところはフレームワークを使わずに
バリデーションチェックとか正規表現するときに
issetで値があるのかを条件分岐で確認するっていう
つかったこともない知識があってそれをしないといけないと
勝手におもいこんでいてどうしたらいいのかわからなかった。
もっとLaravel4をしっておけばこんなところでハマらなかったはず。
あとはエラーの返し方がどうなってるのか理解するのに時間かかった。
どうやってそれが帰って来てんのか?なんでなん?ってところで頭抱えた。

 

入力フォームの値を返す戻るボタン

このへんはほぼリリース1週間前とかに実装する際にハマった
週2でコードレビューしてもらってたから、
もうさすがに自分が書こうとしてるソースがクソだということが
頭の中で書く前からわかってた。どうすれば美しくかけるのか?
そんなことも考えながら作成していた。
やっぱりこういうものはLaravel4の機能にすでにあった。
あとはそれをどうつかうのか?ってところなだけ。
戻るボタンを押されたらwithInput()で入力値を返し
入力画面のデフォ値にInput::old()を使えば解決できた。
 
問題が1つ
ビルトインサーバとapacheで挙動が違った。
apacheでは想定通りの動きをするのに対して
ビルトインサーバのほうでは突然セッションが消えてるっぽかった。
正直これの原因がわからなくてすごいもやもやしてる。
 
この問題にぶちあたっておもったのは
開発環境も本番と同等のものを用意しないといけないんじゃないのか?
っていう小さな疑問で大きな波が俺の中で立った。

 な ぜ な の か ?

 

すでにデフォルトの入力値がある
ページに入力値を返す戻るボタン


これはやり方はなんこもすぐに浮かんだ。
でも違う違う違うって自分で消していった。
正直今回実装したやりかたも絶対に違うとおもってる。
 
すでにデフォルトの入力値がある
ページに入力値を返す戻るボタン
がどういうことかというと例えば
idを選択画面から受け取ってそのidに一致する
レコード情報を取得しそれをviewにぶっこんでやる
viewは編集画面を想定しているため各カラムごとの
フォームが用意していて、そのデフォルト値に
今回のレコード情報をぶっこんでいってる。
フォームの引数的にInput::old()が使えないとおもった。
だから確認画面でhidden()をカラムごとに用意して
「戻るボタン」が押された時にメソッドにそれらが返るようにした。
メソッドは既存のもので対応してview側で条件分岐をかけた。
なのでview側にはレコード情報を入れるフォームのviewと
hidden()で返ってきた値を入れるフォームっていう構成になっている。
書いておいてあれだけどなんていうかコレジャナイ感がぱねぇっすw

 

cssと画像

cssを描きたいし画像も設置したい。
さて、どのディレクトリにcssおいてるんかなぁ^q^って思って
探してみても見つからない。見つからない。見つけられない。
あれ?用意されてないのかな?んん?ない。どうしよう。
困ったどこにおいたらいいんだろう。どこ?わからん。
ってなってた。publicの中に自分で作ることで解決した。
たぶんこういうのってLaravel4を理解しないで使ってるから
こういう問題にぶちあたるんだろうなぁっておもった。

 

PHP

0の取り扱いや不等号の意味がわからなくて困ってたw
これはどういうことなんや?wえっと逆の逆の逆の逆?ってなんや?
否定形を使わずに否定を否定するっていう迷言を作ったのもこれ。
やっぱり基本をちゃんと押さえておかないといろんなところでつまづく。

 

やり残したところ

リリース期限がせまってたからテストを自動化できなかった。
自動化のテストってあたりまえに聞くから挑戦してみたい。

 

まとめ

結局のところできないエンジニアってなにが原因なの?
ってところについて最後は書けたらいいなっておもう。

 

1.ドキュメントを読むことができない

読んでみたじゃ意味なくて理解できた。まで、できてはじめて意味がある。
できないやつが眺めて読んだだけじゃできない。理解するんやあああ
前提知識が足りないならどう補えるかが大切だとおもった。

 

2.ぐぐりかたが下手くそ

これできるエンジニアが周りにたくさんいるから
痛感したんやけどできる人はぐぐるのがすごいうまい。
自分がなにを知りたいのかをたぶん絞り込めてるから早いんじゃないのか?
っていう自分なりの憶測を立ててみた。
これは先輩上司もそうだし同期もすごいとおもう。
俺もこのへんちゃんとできたら今の調べるコストを削って
開発にコストをまわせるとおもう。

 

3.イメージができない

人に説明するときに自分がわかってないと説明できない。
こととおんなじで自分がなにをしたいのか?何をするべきなのか?
を理解してソースをかかないと、なにをしているのかわからなくなって破綻する。
じゃあ、なんでそれをイメージできひんの?って話になるけどそれって
できない人はたぶん俺も一緒で痛感してるところやねんけど
前提知識がなかったり知らなかったりすることがほとんど。
知らないからイメージできない。だからできない。そりゃ当然やわな。

ドキュメントを読む・理解する・実装したいものをイメージしてみる

そして開発する・わからないところはググる

この当たり前のところができないからできないエンジニアなんだとおもう。
当たり前のことをできるようになれば「脱・できないエンジニア」になれると信じてみるw