はてなキーワード: PHPUnitとは
第2回 Larabelチュートリアルを参考にログインするだけのWebアプリケーション(?)を作る
composer create-project laravel/laravel example-app_20240131
続いて、Composerを使用してLaravel Breezeをインストール
composer require laravel/breeze --dev
php artisan breeze:install
いろいろ聞かれる。わからん。とりあえずBlade/Yes/PHPUnitを選択。
すると「・・・・installed successfully.」と表示されたので何かが成功したっぽい。
続いて
php artisan migrate
するとエラー。
Illuminate92;Database92;QueryException SQLSTATE[HY000] [2002] Connection refused
そもそもデータベースの準備を何もしてなかったので、エラーが出るのは当たり前だった。
サンプル用にデータベースを作成し、それに合わせて.envファイルを修正する。
再度、
php artisan migrate
すると「DONE」と表示。成功したっぽい
チュートリアルに従い、「ウェブブラウザでアプリケーションの/loginか/register URLへアクセス」。
すると、Laravelが出してるっぽいエラー
Illuminate 92; Foundation 92; ViteManifestNotFoundException PHP 8.1.27 10.43.0 Vite manifest not found at: /******/example-app_20240131/public/build/manifest.json Run npm run dev in your terminal and refresh the page.
npmとやらが「not found」だったので手順を飛ばしたのがやはりダメだった。
さくらインターネットでnpmを使うにはnode.jsをインストールしてnpmをコンパイルする必要がある?
次回があれば「さくらインターネットのスタンダードプランの環境にnpmをインストールする」である。
早くHello Worldとか書きたい。
Webゲームっていうか、ブラウザ上で動くような奴。PHP(5.3)で突貫工事したので、ペラペラな感じだけど、なんとか公開できて、たまに遊びに来てくれる人がいて(一時はVIPに募集スレも立ったらしい)、何戦かして帰っていくので、とりあえずサーバー代を払った価値くらいはあったかなーという感じ。
で、どういうゲームかっていえば、人狼みたいに「陣営に別れて、決められた目標をクリアするゲーム」です。
『レジスタンス』っていう卓上ゲームというのかな?それを参考にして作りました。
ちょうど開発してから、一ヶ月程度になったので、宣伝をかねて、現状みたいなのをメモ。
一応、前提としては、Pythonだったら、何かしらのシェルプログラムを書いてcronしてるけど、それ以上のことはしていない程度の、技術ワナビー。
ほぼ業務経験なし。継続してスクリプトを開発したのは、今回が始めてという感じ。
単純にPHPで何か作りたいなーと思ったから。一度はPHPを書くべきだなあと思ったりした。それで、何かいい題材ないかなーと思って探してた。
「昔、人狼BBSで遊んだことあるなー、でも同じ人狼のゲームを作っても芸が無いしなー」と考えていたところ、知人と遊んだ『レジスタンス』ってゲームにピンと来て、「こういうゲームをWeb上で遊べたらいいかな。調べたところ、Web上でも人狼っぽいって言われるし、上手くそういう層にアピールできそう」ということで作り始めたのでした。
とはいえ、最初は勢いで書き散らしたので、本当にClassとかまったくなかった。それを徐々に整え直して、なんとかファイル分割できるようになった。それでも、全く足りない。具体的には下のような部分が汚い。
本当はCakePHPとかそういったフレームワークを使えば良かったんだろうけど、「重いんだったら仕方ないしなー」というわけで、フレームワーク無しで使ってみたんだけど、結果として表示部分にやたらと処理が入って醜いったらありゃしない。
表示部分と、実際のシステム部分はわけられるべきだし、フレームワークを使わないまでも、そういう風な機能分割は必要。
で、そういうコードを書いたせいで、下のようなことが起きる。
PHPUnit使ってユニットテストは書いているんだけど、まったく足りない。
全部グリーンにはなるんだけど、実際に動かしてみるとバンバンエラーが出る。
幾つかの関数はテストを先に書いたりしたんだけど、表示部分とかは「ここテスト書きにくいから誤魔化しちゃえー」といって書いたりした。
で、何が起きるかっつーと、リファクタリングするときにガンガン機能が落ちる。そして死ぬ。
さすがに一つのClassが1000行くらいになってきたので「うっわー、これは駄目だわ。分割するべき」って、ゴミみたいなコードに手を入れ始めるんだけど、全く歯が立たない。
とりあえず、既存のテストはグリーンになるけど、どこかで処理がつまづいているという状態でこれは駄目。
「うわ、この部分、テスト書きにくい!」って思った時点で、何かを嗅ぎつけてちゃんとテストに落としておけばよかった、と反省することしきり。
結果として手作業で複数ブラウザ起動して……みたいなことになっちゃう。バグの温存。
CSSとか勉強のために、自分で1から書いているけれども、これは本当にだるい。
知人から、綺麗にコードが書けるから、と薦めてもらったSaSSを使っているけれども、なかなか綺麗にできない。
一応、Twitter BootStrapは知っていたけれども、それに頼るよりは一から書こうと決心して書いたためか、ようわからないし、デザインとしてもこなれていないために気持ち悪いことになっている。
上記のフレームワークについてもそうだけど、流行っているものには、それなりの理由があって、それをわざわざ避けても、結果として、それ以上のものは(素人に毛が生えているくらいでしかない以上)ならないような気がする。
ならばとっととそういうものを使って、さっさと済ませてしまえばよかったなーと思ったりした。
ゲームという性質である以上、どんどん情報量が増えていくために、そういうのを表示しまくっていると、本当に画面がぐちゃぐちゃになる。
セキュリティーには本当手をつけられていない。(徳丸本読めという話になると思う)
(略)
で、本当にボロボロになりながら作ってみて良かったことをメモしておく。
自分は割と現実逃避の為に何かに没頭することがあって、その逃げ先としてプログラミングっていいなあと思ったりした。
あと、自分が書いたコードがヒョコヒョコ頑張っている姿をみていると、すごくかわいくなる。形にもなるし、「こういうものを作ったよ」とも言える。それは単純に楽しい経験。
元々、自分が好きそうなものから題材をピックアップしただけあって、自分が作っているものが、自分が一番愛用しているというのは幸せなことだなと思う。
自分が楽しむためのものだから、自分が一番のユーザーであるし、自分が快適に使いつづけるために改良を続けてる。
人から「こうしたらいいんじゃないの?」というのも勉強になるし、自分がちゃんと&楽に機能を拡張できるように、ちゃんと勉強しようとも思う。そういうのは本当にいい循環。
大抵は、自分が使うから自分だけのものだったので、あまり他の人が使ってくれることを期待していなかったんだけど、今回のは、ときどき遊びに来てくれる人が居る。
例えば、VIPでスレが立ってたり、あるいはニコニコ生放送でプレイ実況を配信してくれたり。
割と「くっだらねー」と思うけど、一人で細々と開発していると、そういう些細なことが嬉しかったりする。
なので、ついついみてしまったり、場合によっては、プレイしているところをいつまでも一緒に徹夜して観戦していたりする。人のプレイしている姿が楽しいというのも、自分が作って良かったなあと思う。
逆に言えば、使ってくれる人がいるからこそ、一ヶ月間開発が続いているようなもので、「ああ、自分のプログラムで楽しんでくれる人が居るんだな」という手応えみたいなものが、モチベーションになっている。
遊んでくれる人が見えるというのは、自分にとっては、モチベーション維持に大切になってる。
だいたい三日坊主で終わっている自分としては、開発が長く続いているほうだと思う。
目指すところは、もっと綺麗なソースコードにして、Githubで公開すること(いや、もうアカウントは既に持っているんだけど、公開するのは凄く恥ずかしい)。
このエントリ気になるなあ。
ある要求を実現するにはどのような技術を用いるか、オプソがあるならどれを使うか、どの範囲を我々がコードするか、事前に経験豊富な(はずの)SEが決めておくべきだったんじゃなかろうか、と思ってみた。
とはいえ現実は、設計工程の終盤にならないと、顧客の要求って完全には出てこないんだよね。少し製造を始めてみないと、オプソで済ますべきか否かが見えてこなかったり。
とりあえず俺はZend Frameworkのディスパッチ部分はゴミ箱に捨てたくて捨てたくてたまらない。無理して ZendFw を使うんじゃなくて、PATH_INFO を自力で解析して自力でディスパッチする方がずっと効率がいい。その方が、Zend Framework の思想を知らない顧客の要求も呑みやすいし(顧客はURLの形式についてもいろいろ面白い事を言ってくるものだよね)、PHPUnitとの調整もしやすいし。