これは2018年10月26日に開催したPHPerイベントYYPHP#58のイベントレポートです。
YYPHPは一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催はほぼ毎週、高田馬場にて。
サブタイトル: PHPerを支える技術たち
YouTubeでの配信映像はこちら-> #YYPHP #58【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】
参加者10名(うちリモート3名)
- PHP歴
- 1年未満: 3名
- 1年: 1名
- 6年: 2名
- 10年以上: 3名
- 不明: 1名
今日の雑談
PHP上達の近道
- 最初どうスタートしました?(PythonとCは書いてる)
- ドットインストール
- 自分で書いたPythonコードをPHPに移植してみる
- Laravelを使うことになった
- LaravelとRailsはそんなに変わらない
- ウェブアプリをどう作るかを重点的に
- Laravelのチュートリアルをやる
- 『はじめてのLaravel』を読む
- Laravelの初心者向けだけどすごく丁寧に書いてあって、
- タスクリストを作るチュートリアルがあるが、1回めは素のPHPで、2回めはLaravelで、3回めはもっと良くする
- 絶対に挫折させないアプリ開発 はじめてのLaravel - plumsa - BOOTH(同人誌通販・ダウンロード)
- DL版はちょっと安い → 【ダウンロード版】絶対に挫折させないアプリ開発 はじめてのLaravel - plumsa - BOOTH(同人誌通販・ダウンロード)
- 技術書典5 | サークルリスト | 技術書典
- その後のステップ
- 作れるようになって、もっと詳しく知りたい場合はソースコードを読む
- 人が作ったソースコードがすごい参考になった
- 自分で1からつくると考えつかないが、他の人が書いたのを読むことで、こうしたらこう動くというのがわかるようになった
- PhpStormを使って黄色いところ(Warning)をひとつひとつ見ていく
- PhpStormとは?
- IDE(統合開発環境)
- 構文チェック
- 最近大規模なプロジェクトでスクリプト言語使うならIDEが無いと不可能だと感じる
- JetBrains系IDEの学生版を取得した話 - Qiita
- PhpStormとは?
- Php2Python - Python alternatives to PHP functions, classes and libraries - Php2Python
- Raspiで顔認識
テストってどうやってる?
- アンケート
- PHPでテストやってことがある人 => 3人
- どういうテストをやろうとしている?
- テストがどういうものかまだわからっていない
- 単体とかユニットとかある
- PHPUnitで単体テストや結合テストをやっている
- 画面のテストは変わりやすい時期はまだやらないか、やる範囲を変わりにくいところに絞ったほうが良い
- コードカバレッジで100%を目指すのは良くない
- PHPはコンパイル言語じゃないので、どれだけ書くか分からないので
- カバレッジは設計が良くないと高められない
- 設計
- クラス
- 何十もif文が入ってるとかだとテストできない場合も
- インフラと密結合になっているとテストが難しく、できない場合がある
- CI(自動テスト)でコードのチェックもさせる
- レガシー
- 1ページ1PHPファイルになっている
- Viewとロジックがごっちゃになっている
- クラスに切り出したときに単体テストを増やしていく
- これだけは動かないといけないというところはSeleniumで自動テストを書いて安全性を確保した上で、単体テストを追加していく
- 1ページ1PHPファイルになっている
- PHPUnitを3〜4年くらい前にやってみたが全くわからなかった
- 使い方がわからなかった
- "PHPUnit Examples"で探せばいろいろ出てくる
- Understanding PHPUnit and How to write Unit test cases | Valuebound
<?php
// PHPUnitっぽいやつ
abstract class TestCase
{
public fucnction assertTrue($expression): void
{
if (!$expression) {
throw new RuntimeException('dame');
}
}
}
// 作った足し算プログラム (これがテスト対象)
class Sum
{
public function sum($x, $y): int
{
return $x + $y;
}
}
// 作った足し算プログラムをチェックするプログラム
class SumTest extends TestCase
{
public function testSum(): void
{
$sum = new Sum();
$this->assertTrue($sum->sum(1, 1) === 2);
}
/**
* パラメタライズド テスティング
* `@dataProvider`アノテーションはPHPUnitの機能
* @dataProvider testData
*/
public function testSum2($a, $b, $expected)
{
$sum = new Sum();
$this->assertTrue($sum->sum($a, $b) === $expected);
}
// パラメタをまとめる
public function testData()
{
yield [1, 1, 2];
yield [1, 2, 3];
yield [100, 100, 200];
// ...
}
}
$test = new SumTest();
$test->testSum();
タスク管理について (yuk_hik_futureさんからのLT)
-
発表スライド:
-
オライリー『エンジニアのための時間管理術』まとめ
-
わりこみ作業の多いSA(システム管理者)向け
-
割り込み作業の処理、タスク管理、時間管理などについて
-
バックログにタスクが増え続ける状態になってた
-
「サイクルシステム」
- 約束のカレンダー
- 今日のスケジュール
- 1日ごとのTODO
- 目標管理
-
プライベートでもできる限り同じツールを使う
-
カレンダーに書くべきこと
- アポイントメントと会議
- 重要な納期
- 将来の作業目標
- 発生したその場で登録したほうがいい
-
今日のスケジュール作成
- カレンダーアプリで見れるやつを使う
-
1日毎のTODO管理
- 優先順位が3段階である理由
- 100段階はだめだった
- 優先順位が3段階である理由
-
以下、発表を聞いてのディスカッション
-
自分の見積もった時間内に終わらせる努力も大事
- 完成度が70%や80%(クオリティーや機能を減らして)でも、その時間内に終わったことにする
- そうしないとずるずる翌日に伸びていく
- 完成度が70%や80%(クオリティーや機能を減らして)でも、その時間内に終わったことにする
-
デイリーのレビューが必要
- タスクがInboxに増え続けるので、やめるのか移譲するのかをデイリーのレビューで管理する
45歳からはじめるPHPプログラミング
どうやって関数からクラスにしていくの?
- 関数を複数使った処理を書いたが、これをどうやってクラスにしていくかわからない。どうやるの?
- 関数をクラスの中に入れていくとクラスになる
- 大事なデータはクラスのプロパティ
- 複数の関数に関わっている変数はプロパティ
<?php
class MemberInfo
{
/**
* @var DomDocument
*/
private $dom;
public function __construct(DomDocument $dom)
{
$this->dom = $dom;
}
public function getMembers(): array
{
$list = $this->dom["#main > div.applicant_area > div:nth-child(3)"]->find(".display_name")->text();
return $list;
}
public function getMemberDetail()
{
$this->dom;
}
}
$memberInfo = new MemberInfo(new DomDocument('html'));
$members = $memberInfo->getMembers();
- 具象をいろいろ見て、抽象化を考える
- 妄想力を鍛えるw
この関数は3つやっていることがある
やることは1つにすべき
<?php
declare(strict_types=1);
/* HTMLが読み込めたかどうかをチェック */
function check_html(bool $html): bool {
if ($html === false) { // 役割3 判定
echo '$html is empty. Please chech your URL.' . "\n"; // 役割1 出力
exit(1); // 役割2 プログラムの終了
}
return true;
}
boolvalで変換するとかできる
if ($var <> null) {
if ($var != null) { // 暗黙の型変換が走る
if (is_null($var)) {
if ($var !== null) { // 暗黙の型変換が走らない
YYPHPは毎週やってます
PHPについてワイワイ話したい方は、YYPHPのイベント情報をチェックしてみて下さい。
以上、YYPHPのレポートでした。次回もワイワイやっていきたいと思います! では、また来週!